<snapdata remixID="10933160"><project name="Mod7 With Drum" app="Snap! 6, https://snap.berkeley.edu" version="1"><notes></notes><thumbnail>data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAKAAAAB4CAYAAAB1ovlvAAAAAXNSR0IArs4c6QAAEHhJREFUeF7tnXlwlOUdx7+7m4QkhFyQhCNQTuWICfcNYlC5Squ20ioyMKag1pGRP6za6UzHmba2doo0HavgKBSPMNIKqAgepSABBcJRGkUg4UwiVy5yH7vb+T64yyabzfsuybvvJvk9M5nN7v7e53mf7/vZ33M/j8XpdDohQRQwSQGLAGiS8pKsUkAAFBBMVUAANFV+SVwAFAZMVUAANFV+SVwAFAZMVaDLAlhSUoLS0lJTxXclHhcXh/j4+KC4l0DfhAAIoLq6GseOHYPdbsfw4cORkJCgnsOuXbswYsQI9OnTx/1cNmzYgGXLluHEiRMoLi5GfX090tPT1ffHjx9Hamqq389QAPRbso5/QXMPuGnTJgVTREQEzp8/j4EDB6KxsRGVlZXqff/+/bFixQq8+OKLeP7553Hw4EHs3bsXvXv3RllZGXr16qXsCGXPnj1x9OhRLFmyBPPnz9cUSwD8XqKamhrwLxgCQeCfUaE5gFu2bMH06dPxzTff4Pr16+jXr58Ci3rYbDblHRcsWICdO3di7ty5ygPGxMTgyy+/RPfu3RV0hC8sLExde/XqVVitVkydOlUzCwLg9xJ1pXpRV8qr5i/ARIMmdUDPh/LBBx/g3LlzmDRpEg4cOICMjAxs3boV8+bNw9tvv42lS5fitddew7PPPovMzEyVBdaVRo4cqYotXsP6EL0Y7WnH+EJDQ3H69GkMGzZMxe0rGO0VmgMYt/0Z1PceFZBHEXrtNMrm/N6dltF5DUimbjERnwASquXLl6uK9Ztvvqkq3mfOnFHJPPzwwwoqttxYLNH2iSeewKuvvoqoqCgFIAMB+/rrr1U9ibasN/EzFlWEdcyYMUEDYOyO51A274/e91N9Hc6i07rktQy8AwgJ87Jl3ZL1Sc77YHHd/fAGVI1bJgA2Hwtu7hUI3qOPPordu3fjzjvvRG5uLoYOHYqsrCz1ucuT0dvxb+XKldixY4e7S4GC0z4vLw/JyckoLCxU4NXV1SlQPVuXzZ+a0V6heV6bA8gfEe/RsXMdnJ+8rm4vJC4Jof2Govb0EcBhhy0mAY3XCt23bpmzHNa5K7wApOdnXAwWiwUDzn0oAH6vkk8PyO+7H/6Hrl9+exjVD5iMhoTbA+YVtACkh3/kkUeaABh9zxLA6UD44DvQWHYVzvpalG59RRPAnJwc1apmdw8bMyklewRALQBvwOdsIlR7gOYrjkAXS1oA0uvPmjWrRQAjRkyC094Ae+lVFGfdLLZdHpDXTpgwQRW3DOxPdIVBgwYJgB4Q+PSALQHozH4PzsqyduGwYsrP0NDQoLoqWD8MNgDZBRMbG9tyEXzqMAtT2KLjdRXBAqBvZHQByCJk/PjxsP86HT3v+6WKrTjrT+o1ImUanA31aLh8HvayK+qzbgNHwdlQB1tcEmpy9ykbvtpiExGZOgNn8/NgW3bDc1y+fBmjRo0KOgBdkjmP/weOLzbp+tFZ714Gy/ApXrYCYBsAvDBwoao400t5Auh02BExcjIclWWwRsXCWVuDqCkLULL5ZYT1H4byz7MQPuTmsBQhtJdcQreho3F08+vAlAc6BoB5h+HMo8fTDoRPtYSbBQGwDQCyu4D1JReAyb95FzW52ajO3Yce036M+sI8hPTsA2t4lCqOak4eQsw9S1CRvVUBSE+Z8Is/ILT3QKCxAdboePx360ZY73k0aAHk6Adb7AMGDEDIrg3uVnC3IamImjgP1f/LVvdedzYXjqpyt7q+WsECYBsBdF1OD4iaCm1XoGFxttKO2Bc/DVoAeWOnTp1S/ZdR+ze5AWQrOHxIGiq/+ggJGb9H0e8eQsPlC14Astulb9++aliOQQBsJwCd+UfgPJ3TdgCvlCJmfkbQAnjhwgW89957ePzxxxGZ/a4XgA3fnUHkmHSU73gTlQc+FgDbQISuRojbA65eClz8pg3J3bi0I3hAVyY9O6K1Mi5FsJZC3t9rApgTOQknT57EfffdpxohrAM6qspQ9IcliJ79EMKSb0dIbAKqjnyOkF7JKN3yNyQ9lYnKAzvcdcCeDz0LR20Vqo/tRtKTL+PE8aOo73+jsh70reCCk3Dm7tGlrGXiD2GJ7+tlK0VwG4vgw4cPY9y4cU1awYySIwEhiQPQUJQPds6WvP9X9Jj5U9RfOIHGsmtNWsFstMTOz4AtplfQN0I85XLufheObS/rAtD60G9BCJuH7OxsNdeQgRNchxZ9IiMh34uk6QGzrWlqBktKSoobQHtlGery/4vItDtVizB82FjYr19DaOIAVH61HVGTF6Dii3816QeMvGM66gtOwRIWjm+PH0PEitVB6wE5H7CoqAhDhgyB7d/r3XXAyNGzEDVpvmrhh/Tqh9pvD6r+T1fwVQSXl5eryaqRkZFqbDzQne66fj0mGWkC6Dlrw96F6oCceMGJpTEHNrsBTPzlX1Dxxfuw9YhH7A9/gSvrnkP9+RNeADYfimv+bAXAm4r4BaBqBevslG3tB3X2cglsw8Yjalga8vPz1RStQD+U1saCOV2MC5aSkpLQfV/WTQ+YNgvdx81GzbeHEJqQjJoTB1CrhuVuBF8ekNPzXUUwveoPzn8kRbDeIriJB2ynfsA6hxP7rjbC+pNfIW7QcIwdOzaoAPT88fjVCl7wJDgc1zwQwMWLF+Ouu+7CK6+8EvC8mlS66kpW0wPuDxmj1kZwdofj8w3o+eAqFbFrLJh1OzUWfOkcGl1jwYNS4KyvQ0h8kqoj0qb44Gew11YhOv3n6F1wBJf+mYniZZnoP+bGmolg8oC6lPPTiGtIOObN9SVhX70uHlCvB7w6YpGax9bW4LDbcTH7Y1gjo5GU9wWSzuyH9VebYOkzJOgBZKMkOjraS4Jr166htrZWTbZ1BYfDoRY1sTObK+k4sZaBs35YrFdUVOD2y58LgIEGsKG8BPlZL8MSGobkigvYcuQ0rNN/ikmz5wVVHfCdd95RK9qefvppN1QFBQUKKC695GxuBg6zsXuKYHJ1XFpamvqfrV1CyOULfM+SwwVfVVUVOB8wZP9aAVAvgKwDshuBXTEq3OJ+llf2bIG9+sY48qAoGw4WN+JvH+8DH3gwFcH0XgTFc7kAAdy2bZtaSDVlyhS89dZbmDFjhlqaSe/H6fuTJ092e8mzZ8/i4sWLaj7h6NGjledjnJygKh6waUGiWQf0bIS0tRhu6Xq2DulNOlIdkMDRI952220ICQlpVRZOwf/uu+8U0HwdPHgwQr9cJx7QHw/ImSEU2zNs375drYhrKbATl7NBXIFFGvvGHnzwwSbmhO/SpUtq2pPZAMZvfRIVE5cb8RvzijPi1E5cn/Wc+3OjF2AFJFO3mIimByxLXYxVq1apbSY81/ESQBYnrO/QC3A9MP/nMk52N3AqE0FkRZxh7dq1eOyxx9y36YKPdsHgAQmFteLSLcro32XO0EhUpy4SAFtblum5JqQlD8jPWKFmEcPOZNd2FHv27MGiRYtUfYhrPlh35IQDekEO5zF4wmeWB+xK25D49/MIrLWmB/SnDvjpp5/i3nvvbTUH3CmB64Rd64X5ShgCXQQHVmZJzZcCPgEMz/s3Ik58hPq+aQFTT3YLCJjUQZNQqwvTzbzLrlwxN1P3QKfdZTeoDLTQkl7LCgiAQoapCgiApsoviQuAwoCpCgiApsoviQuAwoCpCgiApsoviQuAwoCpCgiApsoviQuAwoCpCgiApsoviQuAwoCpCgiApsoviQuAwoCpCgiApsoviQuAwoCpCgiApsoviQuAwoCpCliqq6udXeWQalOVlsRbVMBSXFzs5NYRwRBkHUgwPIXA3kMTAHm86jPPPIOZM2eqzRkZuAMU1/3ytEd+tnnzZrz00kvq7NsXXngB999/v1rny/f8jmuCGbgWmPatHUrdPKsCYGAffjCk1gRALiTneb/h4eHqoGnuZ8fPCCADYeL7qVOnKuDWrFmjFqQTNG7IwzW+3DOFoVu3bmqPZW4+qTcIgHqV6jx2XkUwD572DDyii9vZMqSmpqodDlzbbXAHKBbfXGzuKsa51QZ3O2DgIc2EWG8QAPUq1XnsvADkgnRbeUFAcmiPSUbt0NnutATAgMgeVIl4Adh8iwwj71a24zBS3Y4RtyaA3BVf7874lqHjwD9fgUU5d9DihkXcVVQA7BiQGHmXPgFkXZCNDs9d4rsNSlGH0HDjcf5fd+Z/qPl6v/v+fB1T4DJgw8bVuubeyrJXspGPtmPE7RPAjIwMvPHGG00AjL7rZ7BXlSPm7sUo3fp3RKZOR/GmP98SgNxbMKVkj+wU2jE4MewufQKYmZmJlStXegHYfdzdcNRUor7oDKzdwlsEkN6TrV+2gj2DpwcUAA17ph0qYs06oF8HtcxZDuvcFT4FEAA7FBsBuVlNAFFRAse+f+q6GeukHwFxvQVAXWqJERXQBNCx83U4P1mnSy3L3BWwzvG90bd4QF0ydimjFgGsHLsUn332mdoDekj+f9yH9UWkTEOPGQ+gYu/77tea3H3SCOlSyLRvZn16wMLCQrXRuOdpkYmP/1mdlesKIXGJqNi7xQtAaYS070PqzLH5BPDKlStITExs0gqmB+TBg+wHhMWiTk0SD9iZ8TA+bzrqgOvcRbDW7fjTES3dMFpqdo3vNQFUreD9/9KlhnXiwlZbwSyaOUWLR11xOpd0ROuStVMbaQLYnv2AR44cUWcPM0ybNg3xuVkyEtKp8dLOnE8AOe+vR48eCNu98WYreOQURE1diMoDHyOs3zCwEeI6uFr16Wh0RNOGJ08mJCSoCasyGUH7AXV2ixYBLE97RJ3/xpOP7naccwMYM2cp6gvzFHw9Zt6PxqsFuLTmSd2t4OZiCoCdHS/t/Pn0gLt27UJ6enqTVjCji579MGq/PahAZKvYn1Yw64CuGdccZxYAtR9QZ7fQrAO253xAirl48WI1yYFTvQTAzo6Xdv40AdSOwn8LLnri0faDC3ZII8R/+TrVFT4BZGuVs5Yt7HD2CJzRbLVavUQoLy/Hxo0b8dRTT6nvuNj90KFD6mh7zzgI3969ezFx4kRE5qwXADsVTv5nxieAq1evRnJysnudryvq9evXq+NWFy5ciJMnT6pXro6LjY3Ftm3bMH78eNhsNlXE5uTkqBV0rlnQLvgIpXhA/x9WZ7zCbw+Ym5urYONkUwI4YcIEBSSH7fjetYCdU+4JnOvQak/4xAN2RpRuLU9trgMSOnbZcISjtcCdElxrhvkaFhaGkP1rpQi+tefWaa7yAjDuw1UBO6Q6rOgYSheucYsp64I7DVe6MyKbE+mWSgyNUED2BzRCVYlTtwICoG6pxNAIBQRAI1SVOHUrIADqlkoMjVBAADRCVYlTtwICoG6pxNAIBQRAI1SVOHUrIADqlkoMjVBAADRCVYlTtwICoG6pxNAIBQRAI1SVOHUrIADqlkoMjVBAADRCVYlTtwICoG6pxNAIBQRAI1SVOHUrIADqlkoMjVBAADRCVYlTtwICoG6pxNAIBQRAI1SVOHUrIADqlkoMjVBAADRCVYlTtwICoG6pxNAIBQRAI1SVOHUrIADqlkoMjVBAADRCVYlTtwICoG6pxNAIBQRAI1SVOHUrIADqlkoMjVBAADRCVYlTtwICoG6pxNAIBf4PJO+WPmiCbmUAAAAASUVORK5CYII=</thumbnail><stage name="Stage" width="480" height="360" costume="0" color="255,255,255,1" tempo="120" threadsafe="false" penlog="false" volume="100" pan="0" lines="round" ternary="false" hyperops="true" codify="false" inheritance="true" sublistIDs="false" scheduled="false" id="1"><pentrails>data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAeAAAAFoCAYAAACPNyggAAAAAXNSR0IArs4c6QAADoVJREFUeF7t1cEJAAAIxDDdf2m3sJ+4wEEQuuMIECBAgACBd4F9XzRIgAABAgQIjAB7AgIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECByxcQFpoRMBzwAAAABJRU5ErkJggg==</pentrails><costumes><list struct="atomic" id="2"></list></costumes><sounds><list struct="atomic" id="3"></list></sounds><variables></variables><blocks></blocks><scripts></scripts><sprites><sprite name="Sprite" idx="1" x="0" y="0" heading="90" scale="1" volume="100" pan="0" rotation="1" draggable="true" hidden="true" costume="0" color="80,80,80,1" pen="tip" id="8"><costumes><list struct="atomic" id="9"></list></costumes><sounds><list struct="atomic" id="10"></list></sounds><blocks></blocks><variables></variables><scripts><script x="14" y="10"><block s="receiveGo"></block><custom-block s="Set Volume of Instrument %txt to %n %"><l>bass drum</l><l>100</l></custom-block><block s="doSetVar"><l>Violin 1 Durations</l><block s="reportConcatenatedLists"><list><block s="reportNewList"><list><l>Eighth</l><l>Eighth</l><l>Half</l></list></block><block s="reportNewList"><list><l>Quarter</l><l>Quarter</l><l>Quarter</l></list></block><block s="reportNewList"><list><l>Dotted Half</l></list></block><block s="reportNewList"><list><l>Eighth</l><l>Eighth</l><l>Half</l></list></block><block s="reportNewList"><list><l>Quarter</l><l>Quarter</l><l>Quarter</l></list></block><block s="reportNewList"><list><l>Quarter</l><l>Eighth</l><l>Eighth</l><l>Eighth</l><l>Eighth</l></list></block><block s="reportNewList"><list><l>Dotted Half</l></list></block></list></block></block><block s="doSetVar"><l>Violin 1 Notes</l><block s="reportConcatenatedLists"><list><block s="reportNewList"><list><l>D4</l><l>E4</l><l>G4</l></list></block><block s="reportNewList"><list><l>A4</l><l>C5</l><l>D5</l></list></block><block s="reportNewList"><list><l>R</l></list></block><block s="reportNewList"><list><l>E4</l><l>F#4</l><l>A4</l></list></block><block s="reportNewList"><list><l>E4</l><l>A4</l><l>R</l></list></block><block s="reportNewList"><list><l>R</l><l>D5</l><l>C5</l><l>A4</l><l>G4</l></list></block><block s="reportNewList"><list><l>D4</l></list></block></list></block></block><block s="doSetVar"><l>Cello1 Notes</l><block s="reportNewList"><list><l>D3</l><l>G3</l><l>C4</l></list></block></block><custom-block s="set var %s to %s"><l>Cello1 Duration</l><block s="reportNewList"><list><l>Dotted Half</l><l>Dotted Half</l><l>Dotted Half</l></list></block></custom-block><block s="doSetTempo"><l>120</l></block><custom-block s="Play Tracks %mult%l Time Signature: %s"><list><custom-block s="%txt Track %s Notes %s Durations"><l>violin</l><block var="Violin 1 Notes"/><block var="Violin 1 Durations"/></custom-block><custom-block s="%txt Track %s Notes %s Durations"><l>cello</l><block var="Cello1 Notes"/><block var="Cello1 Duration"/></custom-block><custom-block s="%s Track Repeat %s Drum Pattern until Done"><l>bass drum</l><block s="reportNewList"><list><l>X</l><l></l><l>X</l><l></l><l>X</l><l></l></list></block></custom-block><custom-block s="%s Track Repeat %s Drum Pattern until Done"><l>snare</l><block s="reportNewList"><list><l></l><l></l><l>X</l><l></l><l>X</l><l></l></list></block></custom-block><custom-block s="%s Track Repeat %s Drum Pattern until Done"><l>cabasa</l><block s="reportNewList"><list><l>X</l><l>X</l><l>X</l><l>X</l><l>X</l><l>X</l></list></block></custom-block></list><l>3/4</l></custom-block></script><script x="828.8635817307688" y="309.7333333333334"><block var="Violin 1 Notes"/></script><script x="707.9670973557693" y="374.7333333333334"><block var="Violin 1 Notes"/></script></scripts></sprite><watcher var="Violin 1 Notes" style="normal" x="188.20878674171377" y="20.2472482801751" color="243,118,29" extX="80" extY="69.99999999999999"/><watcher var="Violin 1 Durations" style="normal" x="71.144684177611" y="78.43792158364604" color="243,118,29" hidden="true"/><watcher var="Cello1 Duration" style="normal" x="10" y="31.000001999999995" color="243,118,29" extX="80" extY="70"/><watcher var="Cello1 Notes" style="normal" x="2" y="178" color="243,118,29" extX="80" extY="70"/></sprites></stage><hidden></hidden><headers></headers><code></code><blocks><block-definition s="Play Tracks %&apos;tracks&apos;" type="command" category="control"><header></header><code></code><translations></translations><inputs><input type="%mult%l"></input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>tracks,tempo</l></list><l>window.parent.playTracks &amp;&amp; window.parent.playTracks(tracks, tempo)</l></block><list><block var="tracks"/><block s="getTempo"></block></list></block></script></block-definition><block-definition s="%&apos;Instrument&apos; Repeat %&apos;notes&apos; Track until Done" type="reporter" category="sound"><header></header><code></code><translations></translations><inputs><input type="%s" readonly="true"><options>acoustic guitar&#xD;electric guitar&#xD;piano&#xD;organ&#xD;banjo&#xD;electric bass (finger)&#xD;ukulele&#xD;cabasa&#xD;snare&#xD;bass drum&#xD;closed hi-hat&#xD;open hi-hat&#xD;mid tom&#xD;high tom&#xD;crash cymbal&#xD;violin&#xD;cello</options></input><input type="%s"></input></inputs><script><block s="doReport"><block s="reportNewList"><list><block var="notes"/><block s="reportNewList"><list><l>Eighth</l><l>Eighth</l><l>Eighth</l><l>Eighth</l><l>Eighth</l><l>Eighth</l><l>Eighth</l><l>Eighth</l></list></block><block var="Instrument"/><l>drum loop</l></list></block></block></script></block-definition><block-definition s="Play Tracks %&apos;tracks&apos; Time Signature: %&apos;time signature&apos;" type="command" category="sound"><header></header><code></code><translations></translations><inputs><input type="%s"></input><input type="%s" readonly="true"><options>4/4</options></input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>tracks, timeSignature</l></list><l>window.parent.playTracks &amp;&amp; window.parent.playTracks(tracks, timeSignature)</l></block><list><block var="tracks"/><block var="time signature"/></list></block></script></block-definition><block-definition s="Play %&apos;Note&apos; for %&apos;Note Length&apos; Note Length" type="command" category="sound"><comment x="0" y="0" w="714" collapsed="false">Starts to play the selected note for the specified number of seconds. A full list of acceptable notes can be found by using the dropdown. This block does not wait for the selected note to finish playing.</comment><header></header><code></code><translations></translations><inputs><input type="%s"><options>C0&#xD;C#0&#xD;D0&#xD;D#0&#xD;E0&#xD;F0&#xD;F#0&#xD;G0&#xD;G#0&#xD;A0&#xD;A#0&#xD;B0&#xD;C1&#xD;C#1&#xD;D1&#xD;D#1&#xD;E1&#xD;F1&#xD;F#1&#xD;G1&#xD;G#1&#xD;A1&#xD;A#1&#xD;B1&#xD;C2&#xD;C#2&#xD;D2&#xD;D#2&#xD;E2&#xD;F2&#xD;F#2&#xD;G2&#xD;G#2&#xD;A2&#xD;A#2&#xD;B2&#xD;C3&#xD;C#3&#xD;D3&#xD;D#3&#xD;E3&#xD;F3&#xD;F#3&#xD;G3&#xD;G#3&#xD;A3&#xD;A#3&#xD;B3&#xD;C4&#xD;C#4&#xD;D4&#xD;D#4&#xD;E4&#xD;F4&#xD;F#4&#xD;G4&#xD;G#4&#xD;A4&#xD;A#4&#xD;B4&#xD;C5&#xD;C#5&#xD;D5&#xD;D#5&#xD;E5&#xD;F5&#xD;F#5&#xD;G5&#xD;G#5&#xD;A5&#xD;A#5&#xD;B5&#xD;C6&#xD;C#6&#xD;D6&#xD;D#6&#xD;E6&#xD;F6&#xD;F#6&#xD;G6&#xD;G#6&#xD;A6&#xD;A#6&#xD;B6&#xD;C7&#xD;C#7&#xD;D7&#xD;D#7&#xD;E7&#xD;F7&#xD;F#7&#xD;G7&#xD;G#7&#xD;A7&#xD;A#7&#xD;B7&#xD;C8&#xD;C#8&#xD;D8&#xD;D#8&#xD;E8&#xD;F8&#xD;F#8&#xD;G8&#xD;G#8&#xD;A8&#xD;A#8&#xD;B8&#xD;C9&#xD;C#9&#xD;D9&#xD;D#9&#xD;E9&#xD;F9&#xD;F#9&#xD;G9&#xD;G#9&#xD;A9&#xD;A#9&#xD;B9&#xD;C10&#xD;C#10&#xD;D10&#xD;D#10&#xD;E10&#xD;F10&#xD;F#10&#xD;G10</options></input><input type="%txt" readonly="true"><options>Whole&#xD;Half&#xD;Quarter&#xD;Eighth&#xD;Sixteenth&#xD;Dotted Half&#xD;Dotted Quarter&#xD;Dotted Eighth&#xD;Dotted Sixteenth&#xD;Dotted Thirtysecond&#xD;Thirtysecond</options></input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>note</l><l>noteLength</l></list><l>window.parent.playNote &amp;&amp; window.parent.playNote(note, noteLength)</l></block><list><block var="Note"/><custom-block s="%txt Note Length"><block var="Note Length"/></custom-block></list></block></script></block-definition><block-definition s="Play Chord %&apos;Chord Name&apos; for %&apos;Note Length&apos; Note Length" type="command" category="sound"><header></header><code></code><translations></translations><inputs><input type="%txt" readonly="true"><options>C Chord&#xD;F Chord&#xD;G7 Chord&#xD;A Minor Chord</options></input><input type="%txt"><options>Whole&#xD;Half&#xD;Quarter&#xD;Eighth&#xD;Sixteenth&#xD;Dotted Whole&#xD;Dotted Half&#xD;Dotted Quarter&#xD;Dotted Eighth&#xD;Dotted Sixteenth</options></input></inputs><script><block s="doIfElse"><block s="reportNot"><block s="reportEquals"><l></l><custom-block s="Look Up %s %s"><block var="Chord Name"/><block var="Ukulele Chords"/></custom-block></block></block><script><custom-block s="Play %s for %txt Note Length"><block s="reportListItem"><l>1</l><custom-block s="Look Up %s %s"><block var="Chord Name"/><block var="Ukulele Chords"/></custom-block></block><block var="Note Length"/></custom-block><custom-block s="Play %s for %txt Note Length"><block s="reportListItem"><l>2</l><custom-block s="Look Up %s %s"><block var="Chord Name"/><block var="Ukulele Chords"/></custom-block></block><block var="Note Length"/></custom-block><custom-block s="Play %s for %txt Note Length"><block s="reportListItem"><l>3</l><custom-block s="Look Up %s %s"><block var="Chord Name"/><block var="Ukulele Chords"/></custom-block></block><block var="Note Length"/></custom-block><custom-block s="Play %s for %txt Note Length"><block s="reportListItem"><l>4</l><custom-block s="Look Up %s %s"><block var="Chord Name"/><block var="Ukulele Chords"/></custom-block></block><block var="Note Length"/></custom-block></script><script><custom-block s="Play %s for %txt Note Length"><block s="reportListItem"><l>1</l><block var="Chord Name"/></block><block var="Note Length"/></custom-block><custom-block s="Play %s for %txt Note Length"><block s="reportListItem"><l>2</l><block var="Chord Name"/></block><block var="Note Length"/></custom-block><custom-block s="Play %s for %txt Note Length"><block s="reportListItem"><l>3</l><block var="Chord Name"/></block><block var="Note Length"/></custom-block><custom-block s="Play %s for %txt Note Length"><block s="reportListItem"><l>4</l><block var="Chord Name"/></block><block var="Note Length"/></custom-block></script></block></script></block-definition><block-definition s="Tone Number %&apos;Number&apos; %&apos;newOn&apos;" type="command" category="sound"><header></header><code></code><translations></translations><inputs><input type="%s"></input><input type="%b"></input></inputs><script><block s="doDeclareVariables"><list><l>message</l></list></block><block s="doSetVar"><l>message</l><block s="reportJoinWords"><list><l>toggleOscillator(</l><block var="Number"/><l>,</l><block var="newOn"/><l>)</l></list></block></block><custom-block s="SendMessageToSoundScope %s"><block var="message"/></custom-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.66666666666669" 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;</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.66666666666669" 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;</translations><inputs><input type="%mult%cs"></input></inputs><script><block s="doIf"><block s="reportGreaterThan"><block s="reportListLength"><block var="actions"/></block><l>0</l></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></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="Text Block %&apos;ID&apos; ID %&apos;Title&apos; Title %&apos;Body&apos; Body" type="command" category="looks"><header></header><code></code><translations></translations><inputs><input type="%n"></input><input type="%txt"></input><input type="%txt"></input></inputs><script><block s="doDeclareVariables"><list><l>message</l></list></block><block s="doSetVar"><l>message</l><block s="reportJoinWords"><list><l>textGuide(</l><block var="ID"/><l>&#126;**&#126;</l><block var="Title"/><l>&#126;**&#126;</l><block var="Body"/><l>)</l></list></block></block><custom-block s="SendMessageToSoundScope %s"><block var="message"/></custom-block></script></block-definition><block-definition s="Position Block %&apos;ID&apos; ID %&apos;leftPercent&apos; left % %&apos;topPercent&apos; top %" type="command" category="looks"><header></header><code></code><translations></translations><inputs><input type="%n"></input><input type="%txt"></input><input type="%txt"></input></inputs><script><block s="doDeclareVariables"><list><l>message</l></list></block><block s="doSetVar"><l>message</l><block s="reportJoinWords"><list><l>positionGuideFrame(</l><block var="ID"/><l>&#126;**&#126;</l><block var="leftPercent"/><l>&#126;**&#126;</l><block var="topPercent"/><l>)</l></list></block></block><custom-block s="SendMessageToSoundScope %s"><block var="message"/></custom-block></script></block-definition><block-definition s="Show Block %&apos;ID&apos;" type="command" category="looks"><header></header><code></code><translations></translations><inputs><input type="%n"></input></inputs><script><block s="doDeclareVariables"><list><l>message</l></list></block><block s="doSetVar"><l>message</l><block s="reportJoinWords"><list><l>showGuideFrame(</l><block var="ID"/><l>)</l></list></block></block><custom-block s="SendMessageToSoundScope %s"><block var="message"/></custom-block></script></block-definition><block-definition s="Hide Block %&apos;ID&apos;" type="command" category="looks"><header></header><code></code><translations></translations><inputs><input type="%n"></input></inputs><script><block s="doDeclareVariables"><list><l>message</l></list></block><block s="doSetVar"><l>message</l><block s="reportJoinWords"><list><l>hideGuideFrame(</l><block var="ID"/><l>)</l></list></block></block><custom-block s="SendMessageToSoundScope %s"><block var="message"/></custom-block></script></block-definition><block-definition s="Video Block %&apos;ID&apos; ID %&apos;Title&apos; Title %&apos;Link&apos; Link" type="command" category="looks"><header></header><code></code><translations></translations><inputs><input type="%n"></input><input type="%txt"></input><input type="%txt"></input></inputs><script><block s="doDeclareVariables"><list><l>message</l></list></block><block s="doSetVar"><l>message</l><block s="reportJoinWords"><list><l>videoGuide(</l><block var="ID"/><l>&#126;**&#126;</l><block var="Title"/><l>&#126;**&#126;</l><block var="Link"/><l>)</l></list></block></block><custom-block s="SendMessageToSoundScope %s"><block var="message"/></custom-block></script></block-definition><block-definition s="Copy Project URL to Clipboard" type="command" category="variables"><header></header><code></code><translations></translations><inputs></inputs><script><custom-block s="Copy To Clipboard %txt"><custom-block s="Project URL"></custom-block></custom-block><block s="doIfElse"><block s="reportLessThan"><block s="reportStringSize"><custom-block s="Project URL"></custom-block></block><l>50</l></block><script><custom-block s="Text Block %n ID %txt Title %txt Body"><l>1</l><l>TuneScope Project URL</l><l>Note:	A project must be shared before a TuneScope URL can be created. &#xD;&#xD;(Use the “Save As” option under the “File Menu” to access the “Share” option. The shared project will be highlighted in bold on the file menu after this has been done.)&#xD;&#xD;1.	After the project has been shared, click the TuneScope URL block.&#xD;2.	A Project URL variable will appear on the stage.&#xD;3.	Right-click the project URL on the stage.&#xD;4.	Select “Export” from the drop-down menu that appears.&#xD;5.	A text file with the TuneScope Project URL will appear in your download folder.&#xD;</l></custom-block></script><script><custom-block s="Text Block %n ID %txt Title %txt Body"><l>1</l><l>TuneScope Project URL</l><block s="reportJoinWords"><list><l>The following URL has been copied to the clipboard: </l><custom-block s="Project URL"></custom-block></list></block></custom-block></script></block></script></block-definition><block-definition s="Copy To Clipboard %&apos;string&apos;" type="command" category="variables"><header></header><code></code><translations></translations><inputs><input type="%txt"></input></inputs><script><block s="doDeclareVariables"><list><l>message</l></list></block><block s="doSetVar"><l>message</l><block s="reportJoinWords"><list><l>copyToClipboard(</l><block var="string"/><l>)</l></list></block></block><custom-block s="SendMessageToSoundScope %s"><block var="message"/></custom-block></script></block-definition><block-definition s="Plot Point %&apos;X&apos; %&apos;Y&apos;" type="command" category="looks"><header></header><code></code><translations></translations><inputs><input type="%n"></input><input type="%n"></input></inputs><script><block s="doDeclareVariables"><list><l>message</l></list></block><block s="doSetVar"><l>message</l><block s="reportJoinWords"><list><l>plotPointOnScope(</l><block var="X"/><l>&#126;**&#126;</l><block var="Y"/><l>)</l></list></block></block><custom-block s="SendMessageToSoundScope %s"><block var="message"/></custom-block></script></block-definition><block-definition s="Plot Points %&apos;Points&apos;" type="command" category="looks"><header></header><code></code><translations></translations><inputs><input type="%s"></input></inputs><script><block s="doForEach"><l>item</l><block var="Points"/><script><custom-block s="Plot Point %n %n"><block s="reportListItem"><l>1</l><block var="item"/></block><block s="reportListItem"><l>2</l><block var="item"/></block></custom-block></script></block></script></block-definition><block-definition s="reshape as %&apos;shape&apos; $⍴-1-255-255-0 items of %&apos;data&apos;" type="reporter" category="lists"><comment x="0" y="0" w="180" collapsed="false">The first input is a shape list as in&#xD;SHAPE OF.  The output is an array with those dimensions containing  the atomic items of the second input,&#xD;repeating values if more are needed.</comment><header></header><code></code><translations></translations><inputs><input type="%l"></input><input type="%l"></input></inputs><script><block s="doReport"><custom-block s="reshape helper %l %l"><block var="shape"/><custom-block s="flatten (ravel) $,-1-255-255-0 %l"><block var="data"/></custom-block></custom-block></block></script></block-definition><block-definition s="shape of $⍴-1-255-255-0 %&apos;data&apos;" type="reporter" category="lists"><comment x="0" y="0" w="310" collapsed="false">Reports a flat list of the maximum size of the input array along&#xD;each dimension: number of rows, number of columns, etc.&#xD;&quot;Maximum&quot; because it works even if the array isn&apos;t uniformly shaped.</comment><header></header><code></code><translations></translations><inputs><input type="%l"></input></inputs><script><block s="doDeclareVariables"><list><l>sublists</l></list></block><block s="doIfElse"><block s="reportIsA"><block var="data"/><l><option>list</option></l></block><script><block s="doSetVar"><l>sublists</l><block s="reportKeep"><block s="reifyPredicate"><autolambda><block s="reportNot"><block s="reportListIsEmpty"><l/></block></block></autolambda><list></list></block><block s="reportMap"><block s="reifyReporter"><autolambda><custom-block s="shape of $⍴-1-255-255-0 %l"><l/></custom-block></autolambda><list></list></block><block var="data"/></block></block></block><block s="doIfElse"><block s="reportListIsEmpty"><block var="sublists"/></block><script><block s="doReport"><block s="reportNewList"><list><block s="reportListLength"><block var="data"/></block></list></block></block></script><script><block s="doReport"><block s="reportCONS"><block s="reportListLength"><block var="data"/></block><custom-block s="flatten (ravel) $,-1-255-255-0 %l"><block s="reportMap"><block s="reifyReporter"><autolambda><block s="reportCombine"><block s="reportMap"><block s="reifyReporter"><autolambda><block s="reportListItem"><block var="number"/><l/></block></autolambda><list></list></block><block var="sublists"/></block><block s="reifyReporter"><autolambda><custom-block s="max %s $⌈-1-255-255-0 %s"><l></l><l></l></custom-block></autolambda><list></list></block></block></autolambda><list><l>number</l></list></block><block s="reportNumbers"><l>1</l><block s="reportCombine"><block s="reportMap"><block s="reifyReporter"><autolambda><block s="reportListLength"><l/></block></autolambda><list></list></block><block var="sublists"/></block><block s="reifyReporter"><autolambda><custom-block s="max %s $⌈-1-255-255-0 %s"><l></l><l></l></custom-block></autolambda><list></list></block></block></block></block></custom-block></block></block></script></block></script><script><block s="doReport"><block s="reportNewList"><list></list></block></block></script></block></script></block-definition><block-definition s="max %&apos;a&apos; $⌈-1-255-255-0 %&apos;b&apos;" type="reporter" category="operators"><comment x="0" y="0" w="150.66666666666666" collapsed="false">Reports the greater of its two inputs. Works on strings too.</comment><header></header><code></code><translations></translations><inputs><input type="%s"></input><input type="%s"></input></inputs><script><block s="doReport"><block s="evaluate"><custom-block s="scalar -&gt; hyper %repRing"><block s="reifyReporter"><autolambda><block s="reportIfElse"><block s="reportGreaterThan"><block var="a"/><block var="b"/></block><block var="a"/><block var="b"/></block></autolambda><list><l>a</l><l>b</l></list></block></custom-block><list><block var="a"/><block var="b"/></list></block></block></script></block-definition><block-definition s="flatten (ravel) $,-1-255-255-0 %&apos;data&apos;" type="reporter" category="lists"><comment x="0" y="0" w="216" collapsed="false">Reports a flat list of all the atomic elements &#xD;of sublists of the input list.</comment><header></header><code></code><translations></translations><inputs><input type="%l"></input></inputs><script><block s="doIfElse"><block s="reportIsA"><block var="data"/><l><option>list</option></l></block><script><block s="doReport"><block s="reportConcatenatedLists"><block s="reportMap"><block s="reifyReporter"><autolambda><custom-block s="flatten (ravel) $,-1-255-255-0 %l"><l/></custom-block></autolambda><list></list></block><block var="data"/></block></block></block></script><script><block s="doReport"><block s="reportNewList"><list><block var="data"/></list></block></block></script></block></script></block-definition><block-definition s="outer product %&apos;a&apos; $○.-1-255-255-0 %&apos;function&apos; %&apos;b&apos;" type="reporter" category="lists"><comment x="0" y="0" w="297.99999999999994" collapsed="false">Given two arrays A and B, reports an array whose dimensions are&#xD;APPEND(SHAPE OF (A), SHAPE OF (B))&#xD;in which each atomic item of the result is computed by applying the dyadic function input to an item of A and an item of B.</comment><header></header><code></code><translations></translations><inputs><input type="%l"></input><input type="%repRing"></input><input type="%l"></input></inputs><script><block s="doIf"><block s="reportEquals"><custom-block s="rank of $⍴⍴-1-255-255-0 %l"><block var="a"/></custom-block><l>0</l></block><script><block s="doReport"><block s="evaluate"><block var="function"/><list><block var="a"/><block var="b"/></list></block></block></script></block><block s="doIf"><block s="reportListIsEmpty"><block var="a"/></block><script><block s="doReport"><block s="reportNewList"><list></list></block></block></script></block><block s="doReport"><block s="reportCONS"><custom-block s="outer product %l $○.-1-255-255-0 %repRing %l"><block s="reportListItem"><l>1</l><block var="a"/></block><block var="function"/><block var="b"/></custom-block><custom-block s="outer product %l $○.-1-255-255-0 %repRing %l"><block s="reportCDR"><block var="a"/></block><block var="function"/><block var="b"/></custom-block></block></block></script></block-definition><block-definition s="identity $+-1-255-255-0 %&apos;x&apos;" type="reporter" category="operators"><comment x="0" y="0" w="210.00000000000009" collapsed="false">Reports its input.&#xD;This is useful to fit a value into a different-type input slot, e.g., number into list slot.</comment><header></header><code></code><translations></translations><inputs><input type="%s"></input></inputs><script><block s="doReport"><block var="x"/></block></script></block-definition><block-definition s="rank of $⍴⍴-1-255-255-0 %&apos;array&apos;" type="reporter" category="lists"><comment x="0" y="0" w="239.99999999999994" collapsed="true">Reports the number of dimensions of the input.</comment><header></header><code></code><translations></translations><inputs><input type="%l"></input></inputs><script><block s="doReport"><block s="reportListItem"><l>1</l><custom-block s="shape of $⍴-1-255-255-0 %l"><custom-block s="shape of $⍴-1-255-255-0 %l"><block var="array"/></custom-block></custom-block></block></block></script></block-definition><block-definition s="inner product helper with %&apos;plus&apos; . %&apos;times&apos; %&apos;a&apos; transposed %&apos;tb&apos;" type="reporter" category="other"><header></header><code></code><translations></translations><inputs><input type="%repRing"></input><input type="%repRing"></input><input type="%l"></input><input type="%l"></input></inputs><script><block s="doIf"><block s="reportListIsEmpty"><block var="a"/></block><script><block s="doReport"><block s="reportNewList"><list></list></block></block></script></block><block s="doIf"><block s="reportNot"><block s="reportIsA"><block s="reportListItem"><l>1</l><block s="reportListItem"><l>1</l><block var="a"/></block></block><l><option>list</option></l></block></block><script><block s="doReport"><block s="reportCONS"><block s="reportMap"><block s="reifyReporter"><autolambda><custom-block s="generalized dotproduct %l %l with sum %repRing product %repRing"><block s="reportListItem"><l>1</l><block var="a"/></block><l/><block var="plus"/><block var="times"/></custom-block></autolambda><list></list></block><block var="tb"/></block><custom-block s="inner product helper with %repRing . %repRing %l transposed %l"><block var="plus"/><block var="times"/><block s="reportCDR"><block var="a"/></block><block var="tb"/></custom-block></block></block></script></block><block s="doReport"><block s="reportCONS"><custom-block s="inner product helper with %repRing . %repRing %l transposed %l"><block var="plus"/><block var="times"/><block s="reportListItem"><l>1</l><block var="a"/></block><block var="tb"/></custom-block><custom-block s="inner product helper with %repRing . %repRing %l transposed %l"><block var="plus"/><block var="times"/><block s="reportCDR"><block var="a"/></block><block var="tb"/></custom-block></block></block></script></block-definition><block-definition s="transpose $⍉-1.5-255-255-0 %&apos;array&apos;" type="reporter" category="lists"><comment x="0" y="0" w="168" collapsed="false">Takes a multidimensional array, and&#xD;reports an array whose dimensions&#xD;are reversed (as reported by&#xD;SHAPE OF).  In the case of a&#xD;two-dimensional array, does the usual transposition of rows and columns.</comment><header></header><code></code><translations></translations><inputs><input type="%l"></input></inputs><script><block s="doIf"><block s="reportNot"><block s="reportIsA"><block var="array"/><l><option>list</option></l></block></block><script><block s="doReport"><block var="array"/></block></script></block><block s="doIf"><block s="reportListIsEmpty"><block var="array"/></block><script><block s="doReport"><block s="reportNewList"><list><block s="reportNewList"><list></list></block></list></block></block></script><comment w="290.6666666666667" collapsed="true">If there are no atomic data, we don&apos;t have any shape information, so we can&apos;t really transpose it.  But an empty list is 0 rows of some number of columns, so the transpose should be 0 columns in some number of rows.  We arbitrarily make it 0 columns of one row.  This at least has one dimension of the shape correct.</comment></block><block s="doIf"><block s="reportNot"><block s="reportIsA"><block s="reportListItem"><l>1</l><block var="array"/></block><l><option>list</option></l></block></block><script><block s="doReport"><block var="array"/></block></script><comment w="274.6666666666667" collapsed="true">The transpose of a vector is just the vector itself.</comment></block><block s="doIf"><block s="reportListIsEmpty"><block s="reportListItem"><l>1</l><block var="array"/></block></block><script><block s="doReport"><block s="reportNewList"><list></list></block></block></script><comment w="274.6666666666667" collapsed="true">This is the opposite no-atomic-data situation from above.  We know that there are (length array) rows of 0 columns, so the transpose is 0 rows, i.e., an empty list.  But we lose the number of original rows, transpose columns.</comment></block><block s="doReport"><custom-block s="deep map %repRing %predRing %l"><block s="reifyReporter"><autolambda><custom-block s="nth item 1 %n %l"><block s="reportListLength"><custom-block s="shape of $⍴-1-255-255-0 %l"><block var="array"/></custom-block></block><block s="reportListItem"><block s="reportMap"><block s="reifyReporter"><autolambda><block s="reportNewList"><list><l></l></list></block></autolambda><list></list></block><block var="atom"/></block><block var="array"/></block></custom-block></autolambda><list><l>atom</l></list></block><block s="reifyPredicate"><autolambda><block s="reportCombine"><block s="reportMap"><block s="reifyReporter"><autolambda><block s="reportNot"><block s="reportIsA"><l></l><l><option>list</option></l></block></block></autolambda><list></list></block><block var="node"/></block><block s="reifyReporter"><autolambda><block s="reportAnd"><l/><l/></block></autolambda><list></list></block></block></autolambda><list><l>node</l></list></block><custom-block s="$⍳-1.5-255-255-0 %n"><custom-block s="reverse row order (column contents) $⦵-1.5-255-255-0 %l"><custom-block s="shape of $⍴-1-255-255-0 %l"><block var="array"/></custom-block></custom-block></custom-block></custom-block></block></script><scripts><script x="690.0310872395834" y="485.5555555555558"><block var="array"/></script><script x="544.6666666666666" y="306.1111111111114"><block s="doIf"><block s="reportListIsEmpty"><block s="reportCDR"><block var="array"/></block></block><script><block s="doReport"><block s="reportMap"><block s="reifyReporter"><autolambda><block s="reportNewList"><list><l></l></list></block></autolambda><list></list></block><block s="reportListItem"><l>1</l><block var="array"/></block></block></block></script><comment w="212.6666666666666" collapsed="true">This is one row, n columns.  So the transpose is n rows, one column.</comment></block></script></scripts></block-definition><block-definition s="reverse row order (column contents) $⦵-1.5-255-255-0 %&apos;list&apos;" type="reporter" category="lists"><comment x="0" y="0" w="286" collapsed="false">Reverses the order of the (toplevel) items of the input.&#xD;&#xD;If the input is a matrix, this means it reverses the order of the rows, which is a reflection through a horizontal axis, as the ⦵ symbol suggests.</comment><header></header><code></code><translations></translations><inputs><input type="%l"></input></inputs><script><block s="doIf"><block s="reportListIsEmpty"><block var="list"/></block><script><block s="doReport"><block s="reportNewList"><list></list></block></block></script></block><block s="doReport"><block s="reportMap"><block s="reifyReporter"><autolambda><block s="reportListItem"><l></l><block var="list"/></block></autolambda><list></list></block><block s="reportNumbers"><block s="reportListLength"><block var="list"/></block><l>1</l></block></block></block></script></block-definition><block-definition s="deep insert %&apos;first&apos; %&apos;rest&apos;" type="reporter" category="other"><comment x="0" y="0" w="131.33333333333334" collapsed="false">Recursively deep-inserts&#xD;the items of the first input&#xD;into the items of the second&#xD;input.  If the first input is not&#xD;a list, then it is inserted with&#xD;IN FRONT OF in the second&#xD;unless the second also isn&apos;t&#xD;a list, in which case they are&#xD;combined with LIST.</comment><header></header><code></code><translations></translations><inputs><input type="%l"></input><input type="%l"></input></inputs><script><block s="doIf"><block s="reportNot"><block s="reportIsA"><block var="first"/><l><option>list</option></l></block></block><script><block s="doIf"><block s="reportNot"><block s="reportIsA"><block var="rest"/><l><option>list</option></l></block></block><script><block s="doReport"><block s="reportNewList"><list><block var="first"/><block var="rest"/></list></block></block></script></block><block s="doReport"><block s="reportCONS"><block var="first"/><block var="rest"/></block></block></script></block><block s="doIf"><block s="reportAnd"><block s="reportNot"><block s="reportIsA"><block s="reportListItem"><l>1</l><block var="first"/></block><l><option>list</option></l></block></block><block s="reportListIsEmpty"><block s="reportCDR"><block var="first"/></block></block></block><script><block s="doReport"><block s="reportCONS"><block s="reportListItem"><l>1</l><block var="first"/></block><block var="rest"/></block></block></script></block><block s="doReport"><custom-block s="multimap %repRing %mult%l"><block s="reifyReporter"><autolambda><custom-block s="deep insert %l %l"><l/><l/></custom-block></autolambda><list></list></block><list><block var="first"/><block var="rest"/></list></custom-block></block></script></block-definition><block-definition s="multimap %&apos;function&apos; %&apos;data&apos;" type="reporter" category="other"><comment x="0" y="0" w="215.33333333333334" collapsed="false">Like MAP, but can take any number of lists&#xD;as inputs.  The lists must all be the same size.&#xD;The function input must take a number of inputs&#xD;equal to the number of lists.  MULTIMAP calls&#xD;the function with all the first items, then all the&#xD;second items, and so on.</comment><header></header><code></code><translations></translations><inputs><input type="%repRing"></input><input type="%mult%l"></input></inputs><script><block s="doIf"><custom-block s="combine in rows (reduce by column vectors) %repRing $/-1-255-255-0 %l"><block s="reifyReporter"><autolambda><block s="reportOr"><l/><l/></block></autolambda><list></list></block><block s="reportMap"><block s="reifyReporter"><autolambda><block s="reportListIsEmpty"><l/></block></autolambda><list></list></block><block var="data"/></block></custom-block><script><block s="doIfElse"><custom-block s="combine in rows (reduce by column vectors) %repRing $/-1-255-255-0 %l"><block s="reifyReporter"><autolambda><block s="reportAnd"><l/><l/></block></autolambda><list></list></block><block s="reportMap"><block s="reifyReporter"><autolambda><block s="reportListIsEmpty"><l/></block></autolambda><list></list></block><block var="data"/></block></custom-block><script><block s="doReport"><block s="reportNewList"><list></list></block></block></script><script><custom-block s="error %txt"><l>Non-conforming shapes.</l></custom-block></script></block></script></block><block s="doReport"><block s="reportCONS"><block s="evaluate"><block var="function"/><block s="reportMap"><block s="reifyReporter"><autolambda><block s="reportListItem"><l>1</l><l/></block></autolambda><list></list></block><block var="data"/></block></block><custom-block s="multimap %repRing %mult%l"><block var="function"/><block s="reportMap"><block s="reifyReporter"><autolambda><block s="reportCDR"><l/></block></autolambda><list></list></block><block var="data"/></block></custom-block></block></block></script></block-definition><block-definition s="printable %&apos;data&apos;" type="reporter" category="lists"><comment x="0" y="0" w="188.66666666666669" collapsed="false">Takes a (possibly deep) list as input,&#xD;and reports a human-readable text form &#xD;of the list (namely, Lisp notation).</comment><header></header><code></code><translations></translations><inputs><input type="%l"></input></inputs><script><block s="doIf"><block s="reportNot"><block s="reportIsA"><block var="data"/><l><option>list</option></l></block></block><script><block s="doReport"><block var="data"/></block></script></block><block s="doIf"><block s="reportListIsEmpty"><block var="data"/></block><script><block s="doReport"><l>()</l></block></script></block><block s="doReport"><block s="reportJoinWords"><list><l>(</l><block s="reportCombine"><block s="reportMap"><block s="reifyReporter"><autolambda><custom-block s="printable %l"><l/></custom-block></autolambda><list></list></block><block var="data"/></block><block s="reifyReporter"><autolambda><block s="reportJoinWords"><list><l></l><l> </l><l></l></list></block></autolambda><list></list></block></block><l>)</l></list></block></block></script></block-definition><block-definition s="generalized dotproduct %&apos;a&apos; %&apos;b&apos; with sum %&apos;sum&apos; product %&apos;product&apos;" type="reporter" category="other"><header></header><code></code><translations></translations><inputs><input type="%l"></input><input type="%l"></input><input type="%repRing"></input><input type="%repRing"></input></inputs><script><block s="doReport"><block s="reportCombine"><custom-block s="multimap %repRing %mult%l"><block var="product"/><list><block var="a"/><block var="b"/></list></custom-block><block var="sum"/></block></block></script></block-definition><block-definition s="inner product %&apos;a&apos; %&apos;plus&apos; $.-1-255-255-0 %&apos;times&apos; %&apos;b&apos;" type="reporter" category="lists"><comment x="0" y="0" w="252.6666666666666" collapsed="false">Computes a generalized matrix multiplication.&#xD;&#xD;In normal matrix multiplication, each cell of the result&#xD;is computed by multiplying individual numbers within&#xD;a row of the left input and a column of the right input,&#xD;and then adding those products.  In APL terms this is&#xD;+.× (&quot;plus dot times&quot;)&#xD;Any dyadic functions can replace addition and multiplication in this algorithm; a common case is&#xD;∨.∧ (&quot;or dot and&quot;)</comment><header></header><code></code><translations></translations><inputs><input type="%l"></input><input type="%repRing"></input><input type="%repRing"></input><input type="%l"></input></inputs><script><block s="doIf"><block s="reportNot"><block s="reportIsA"><block var="a"/><l><option>list</option></l></block></block><script><block s="doSetVar"><l>a</l><block s="reportNewList"><list><block var="a"/></list></block></block></script></block><block s="doIf"><block s="reportNot"><block s="reportIsA"><block var="b"/><l><option>list</option></l></block></block><script><block s="doSetVar"><l>b</l><block s="reportNewList"><list><block var="b"/></list></block></block></script></block><block s="doIf"><block s="reportAnd"><block s="reportEquals"><block s="reportListItem"><l><option>last</option></l><custom-block s="shape of $⍴-1-255-255-0 %l"><block var="a"/></custom-block></block><l>1</l></block><block s="reportGreaterThan"><block s="reportListItem"><l>1</l><custom-block s="shape of $⍴-1-255-255-0 %l"><block var="b"/></custom-block></block><l>1</l></block></block><script><block s="doDeclareVariables"><list><l>ta</l></list></block><block s="doSetVar"><l>ta</l><custom-block s="transpose $⍉-1.5-255-255-0 %l"><block var="a"/></custom-block></block><block s="doSetVar"><l>a</l><custom-block s="transpose $⍉-1.5-255-255-0 %l"><block s="reportMap"><block s="reifyReporter"><autolambda><block var="ta"/></autolambda><list></list></block><block s="reportNumbers"><l>1</l><block s="reportListItem"><l>1</l><custom-block s="shape of $⍴-1-255-255-0 %l"><block var="b"/></custom-block></block></block></block></custom-block></block></script></block><block s="doIf"><block s="reportAnd"><block s="reportGreaterThan"><block s="reportListItem"><l><option>last</option></l><custom-block s="shape of $⍴-1-255-255-0 %l"><block var="a"/></custom-block></block><l>1</l></block><block s="reportEquals"><block s="reportListItem"><l>1</l><custom-block s="shape of $⍴-1-255-255-0 %l"><block var="b"/></custom-block></block><l>1</l></block></block><script><block s="doSetVar"><l>b</l><block s="reportMap"><block s="reifyReporter"><autolambda><block var="b"/></autolambda><list></list></block><block s="reportNumbers"><l>1</l><block s="reportListItem"><l><option>last</option></l><custom-block s="shape of $⍴-1-255-255-0 %l"><block var="a"/></custom-block></block></block></block></block></script></block><block s="doReport"><custom-block s="inner product helper with %repRing . %repRing %l transposed %l"><block var="plus"/><block var="times"/><block var="a"/><custom-block s="transpose $⍉-1.5-255-255-0 %l"><block var="b"/></custom-block></custom-block></block></script></block-definition><block-definition s="min %&apos;a&apos; $⌊-1.2-255-255-0 %&apos;b&apos;" type="reporter" category="operators"><comment x="0" y="0" w="211.33333333333334" collapsed="true">Reports the smaller of its two inputs.</comment><header></header><code></code><translations></translations><inputs><input type="%s"></input><input type="%s"></input></inputs><script><block s="doReport"><block s="evaluate"><custom-block s="scalar -&gt; hyper %repRing"><block s="reifyReporter"><autolambda><block s="reportIfElse"><block s="reportLessThan"><block var="a"/><block var="b"/></block><block var="a"/><block var="b"/></block></autolambda><list><l>a</l><l>b</l></list></block></custom-block><list><block var="a"/><block var="b"/></list></block></block></script></block-definition><block-definition s="log base %&apos;b&apos; $⍟-1.5-255-255-0 %&apos;x&apos;" type="reporter" category="operators"><comment x="0" y="0" w="211.99999999999997" collapsed="false">Computes logarithms in any base.&#xD;&#xD;The base is the left input.  It&apos;s usual in APL that if there&apos;s a main data input and some sort of control input, the latter comes on the left.  This is because APL syntax, unless you use parentheses, groups computations from right to left.&#xD;&#xD;APL has a monadic version of this function that computes natural logs (log to the base e).</comment><header></header><code></code><translations></translations><inputs><input type="%n"></input><input type="%n"></input></inputs><script><block s="doReport"><block s="evaluate"><custom-block s="scalar -&gt; hyper %repRing"><block s="reifyReporter"><autolambda><block s="reportQuotient"><block s="reportMonadic"><l><option>ln</option></l><block var="x"/></block><block s="reportMonadic"><l><option>ln</option></l><block var="b"/></block></block></autolambda><list><l>b</l><l>x</l></list></block></custom-block><list><block var="b"/><block var="x"/></list></block></block></script></block-definition><block-definition s="combs %&apos;r&apos; at a time $!-1-255-255-0 of %&apos;n&apos;" type="reporter" category="operators"><comment x="0" y="0" w="218.66666666666669" collapsed="false">Computes the number of combinations of right-input things taken left-input at a time, otherwise known as the elements of Pascal&apos;s triangle.  This block shares the ! symbol with the monadic factorial function, because the formula for computing this function uses factorials.</comment><header></header><code></code><translations></translations><inputs><input type="%n"></input><input type="%n"></input></inputs><script><block s="doReport"><block s="evaluate"><custom-block s="scalar -&gt; hyper %repRing"><block s="reifyReporter"><autolambda><block s="reportIfElse"><block s="reportAnd"><custom-block s="%s ≥ %s"><block var="n"/><l>0</l></custom-block><block s="reportAnd"><custom-block s="%s ≥ %s"><block var="r"/><l>0</l></custom-block><custom-block s="%s ≤ %s"><block var="r"/><block var="n"/></custom-block></block></block><block s="reportQuotient"><custom-block s="factorial $!-1-255-255-0 %n"><block var="n"/></custom-block><block s="reportProduct"><custom-block s="factorial $!-1-255-255-0 %n"><block var="r"/></custom-block><custom-block s="factorial $!-1-255-255-0 %n"><block s="reportDifference"><block var="n"/><block var="r"/></block></custom-block></block></block><l>0</l></block></autolambda><list><l>r</l><l>n</l></list></block></custom-block><list><block var="r"/><block var="n"/></list></block></block></script></block-definition><block-definition s="factorial $!-1-255-255-0 %&apos;n&apos;" type="reporter" category="operators"><comment x="0" y="0" w="172.66666666666666" collapsed="false">The factorial of a positive integer n is the product of the integers from 1 to n.&#xD;&#xD;In real APL, the domain of this function is extended beyond integers to compute the gamma function.</comment><header></header><code></code><translations></translations><inputs><input type="%n"></input></inputs><script><block s="doIfElse"><block s="reportIsA"><block var="n"/><l><option>list</option></l></block><script><block s="doReport"><block s="reportMap"><block s="reifyReporter"><autolambda><custom-block s="factorial $!-1-255-255-0 %n"><l></l></custom-block></autolambda><list></list></block><block var="n"/></block></block></script><script><block s="doReport"><block s="reportIfElse"><custom-block s="zero? %n"><block var="n"/></custom-block><l>1</l><custom-block s="combine in rows (reduce by column vectors) %repRing $/-1-255-255-0 %l"><block s="reifyReporter"><autolambda><block s="reportProduct"><l></l><l></l></block></autolambda><list></list></block><block s="reportNumbers"><l>1</l><block var="n"/></block></custom-block></block></block></script></block></script></block-definition><block-definition s="combine in rows (reduce by column vectors) %&apos;func&apos; $/-1-255-255-0 %&apos;stuff&apos;" type="reporter" category="lists"><comment x="0" y="0" w="288.6666666666667" collapsed="false">This function has two names because there are two ways&#xD;to understand it.&#xD;&#xD;Lisp way:  A matrix is a list of rows.  This block combines the numbers in each row, producing one value for the entire row.&#xD;&#xD;APL way:  A matrix is made of vectors.  This block takes each column as a vector, and does vector arithmetic on the columns, producing one column as the result.</comment><header></header><code></code><translations></translations><inputs><input type="%repRing"></input><input type="%l"></input></inputs><script><block s="doIfElse"><block s="reportGreaterThan"><custom-block s="rank of $⍴⍴-1-255-255-0 %l"><block var="stuff"/></custom-block><l>1</l></block><script><block s="doReport"><block s="reportMap"><block s="reifyReporter"><autolambda><custom-block s="combine in rows (reduce by column vectors) %repRing $/-1-255-255-0 %l"><block var="func"/><l/></custom-block></autolambda><list></list></block><block var="stuff"/></block></block></script><script><block s="doReport"><block s="reportCombine"><block var="stuff"/><block var="func"/></block></block></script></block></script></block-definition><block-definition s="%&apos;a&apos; scalar %&apos;pred&apos; %&apos;b&apos;" type="predicate" category="operators"><comment x="0" y="0" w="190" collapsed="false">Acts just like the function selected from&#xD;the pulldown menu, but hyperized, so&#xD;comparing two equal-sized lists reports&#xD;a list of the same length as the inputs,&#xD;with the results of item-by-item comparisons.</comment><header></header><code></code><translations></translations><inputs><input type="%s"></input><input type="%s" readonly="true">﹦<options>﹦&#xD;≠&#xD;identical to&#xD;and&#xD;or&#xD;is _ a _?</options></input><input type="%s"></input></inputs><script><block s="doReport"><block s="evaluate"><custom-block s="scalar -&gt; hyper %repRing"><block s="reifyReporter"><autolambda><block s="evaluate"><block s="reportListItem"><block s="reportListIndex"><block var="pred"/><block s="reportNewList"><list><l>﹦</l><l>≠</l><l>identical to</l><l>and</l><l>or</l><l>is _ a _?</l></list></block></block><block s="reportNewList"><list><block s="reifyPredicate"><autolambda><block s="reportEquals"><l></l><l></l></block></autolambda><list></list></block><block s="reifyPredicate"><autolambda><block s="reportNot"><block s="reportEquals"><l></l><l></l></block></block></autolambda><list></list></block><block s="reifyPredicate"><autolambda><block s="reportIsIdentical"><l></l><l></l></block></autolambda><list></list></block><block s="reifyPredicate"><autolambda><block s="reportAnd"><l/><l/></block></autolambda><list></list></block><block s="reifyPredicate"><autolambda><block s="reportOr"><l/><l/></block></autolambda><list></list></block><block s="reifyPredicate"><autolambda><block s="reportIsA"><l></l><l></l></block></autolambda><list></list></block></list></block></block><list><block var="a"/><block var="b"/></list></block></autolambda><list><l>a</l><l>b</l></list></block></custom-block><list><block var="a"/><block var="b"/></list></block></block></script></block-definition><block-definition s="%&apos;howmany&apos; deal $?-1-255-255-0 %&apos;range&apos;" type="reporter" category="operators"><comment x="0" y="0" w="177.33333333333334" collapsed="false">Report a list with left-input random integers in the range 1 to right-input.&#xD;No number appears more than once&#xD;in the result.</comment><header></header><code></code><translations></translations><inputs><input type="%n"></input><input type="%n"></input></inputs><script><block s="doReport"><block s="evaluate"><custom-block s="scalar -&gt; hyper %repRing"><block s="reifyReporter"><autolambda><custom-block s="%n deal helper %l"><block var="howmany"/><block s="reportNumbers"><l>1</l><block var="range"/></block></custom-block></autolambda><list><l>howmany</l><l>range</l></list></block></custom-block><list><block var="howmany"/><block var="range"/></list></block></block></script></block-definition><block-definition s="%&apos;howmany&apos; deal helper %&apos;data&apos;" type="reporter" category="other"><header></header><code></code><translations></translations><inputs><input type="%n"></input><input type="%l"></input></inputs><script><block s="doIf"><block s="reportEquals"><block var="howmany"/><l>0</l></block><script><block s="doReport"><block s="reportNewList"><list></list></block></block></script></block><block s="doDeclareVariables"><list><l>choice</l></list></block><block s="doSetVar"><l>choice</l><block s="reportListItem"><block s="reportRandom"><l>1</l><block s="reportListLength"><block var="data"/></block></block><block var="data"/></block></block><block s="doReport"><block s="reportCONS"><block var="choice"/><custom-block s="%n deal helper %l"><block s="reportDifference"><block var="howmany"/><l>1</l></block><block s="reportKeep"><block s="reifyPredicate"><autolambda><block s="reportNot"><block s="reportEquals"><l></l><block var="choice"/></block></block></autolambda><list></list></block><block var="data"/></block></custom-block></block></block></script></block-definition><block-definition s="signum $×-1-255-255-0 %&apos;num&apos;" type="reporter" category="operators"><comment x="0" y="0" w="159.99999999999997" collapsed="false">Reports 1 if the input is positive,&#xD;0 if the input is zero,&#xD;or -1 if the input is negative.</comment><header></header><code></code><translations></translations><inputs><input type="%n"></input></inputs><script><block s="doIf"><block s="reportIsA"><block var="num"/><l><option>list</option></l></block><script><block s="doReport"><block s="reportMap"><block s="reifyReporter"><autolambda><custom-block s="signum $×-1-255-255-0 %n"><l></l></custom-block></autolambda><list></list></block><block var="num"/></block></block></script></block><block s="doIf"><block s="reportListContainsItem"><block s="reportNewList"><list><l>0</l><block s="reportBoolean"><l><bool>false</bool></l></block></list></block><block var="num"/></block><script><block s="doReport"><l>0</l></block></script></block><block s="doReport"><block s="reportQuotient"><block var="num"/><block s="reportMonadic"><l><option>abs</option></l><block var="num"/></block></block></block></script></block-definition><block-definition s="reciprocal $÷-1-255-255-0 %&apos;num&apos;" type="reporter" category="operators"><comment x="0" y="0" w="102.66666666666667" collapsed="false">reports 1 divided&#xD;by its input.</comment><header></header><code></code><translations></translations><inputs><input type="%n"></input></inputs><script><block s="doReport"><block s="reportQuotient"><l>1</l><block var="num"/></block></block></script></block-definition><block-definition s="roll $?-1-255-255-0 %&apos;num&apos;" type="reporter" category="operators"><comment x="0" y="0" w="180.66666666666666" collapsed="false">This block reports a random integer between 1 and its input.  To roll more than one die, use (for three dice)&#xD;roll (reshape as 3 items of 6)&#xD;APL:  ?3⍴6&#xD;Don&apos;t use reshape as 3 items of roll 6, because that would roll one die and report 3 copies of the same random roll. </comment><header></header><code></code><translations></translations><inputs><input type="%n"></input></inputs><script><block s="doReport"><block s="reportRandom"><l>1</l><block var="num"/></block></block></script></block-definition><block-definition s="GCD (or) %&apos;a&apos; $∨-1.2-255-255-0 %&apos;b&apos;" type="reporter" category="operators"><comment x="0" y="0" w="230.66666666666666" collapsed="false">Reports the greatest common divisor of its inputs.&#xD;If the inputs are values in {0,1} then this is equivalent to the logical OR of the values, with 0=False, 1=True.  Hence the APL symbol ∨.&#xD;Also accepts Snap! Booleans as inputs.</comment><header></header><code></code><translations></translations><inputs><input type="%n"></input><input type="%n"></input></inputs><script><block s="doReport"><block s="evaluate"><custom-block s="scalar -&gt; hyper %repRing"><block s="reifyReporter"><script><block s="doIf"><block s="reportListContainsItem"><block s="reportNewList"><list><l>0</l><block s="reportBoolean"><l><bool>false</bool></l></block></list></block><block var="b"/></block><script><block s="doReport"><block var="a"/></block></script></block><block s="doReport"><custom-block s="GCD (or) %n $∨-1.2-255-255-0 %n"><block var="b"/><block s="reportModulus"><block var="a"/><block var="b"/></block></custom-block></block></script><list><l>a</l><l>b</l></list></block></custom-block><list><block var="a"/><block var="b"/></list></block></block></script></block-definition><block-definition s="scalar -&gt; hyper %&apos;func&apos;" type="reporter" category="control"><comment x="0" y="0" w="218.00000000000006" collapsed="false">Takes a dyadic scalar function as input, and&#xD;hyperizes it, so that it can take lists as inputs.</comment><header></header><code></code><translations></translations><inputs><input type="%repRing"></input></inputs><script><block s="doDeclareVariables"><list><l>hyper func</l></list></block><block s="doSetVar"><l>hyper func</l><block s="reifyReporter"><script><block s="doIfElse"><custom-block s="scalar? %s"><block var="a"/></custom-block><script><block s="doIfElse"><custom-block s="scalar? %s"><block var="b"/></custom-block><script><block s="doReport"><block s="evaluate"><block var="func"/><list><custom-block s="scalar-value helper %s"><block var="a"/></custom-block><custom-block s="scalar-value helper %s"><block var="b"/></custom-block></list></block></block></script><script><block s="doReport"><block s="reportMap"><block s="reifyReporter"><autolambda><block s="evaluate"><block var="hyper func"/><list><custom-block s="scalar-value helper %s"><block var="a"/></custom-block><l></l></list></block></autolambda><list></list></block><block var="b"/></block></block></script></block></script><script><block s="doIfElse"><custom-block s="scalar? %s"><block var="b"/></custom-block><script><block s="doReport"><block s="reportMap"><block s="reifyReporter"><autolambda><block s="evaluate"><block var="hyper func"/><list><l></l><custom-block s="scalar-value helper %s"><block var="b"/></custom-block></list></block></autolambda><list></list></block><block var="a"/></block></block></script><script><block s="doReport"><custom-block s="multimap %repRing %mult%l"><block var="hyper func"/><list><block var="a"/><block var="b"/></list></custom-block></block></script></block></script></block></script><list><l>a</l><l>b</l></list></block></block><block s="doReport"><block var="hyper func"/></block></script></block-definition><block-definition s="scalar? %&apos;x&apos;" type="predicate" category="other"><comment x="0" y="0" w="199.33333333333337" collapsed="false">Reports True if the input is an APL scalar,&#xD;i.e., either an atomic (non-list) value, or&#xD;an array (list of lists) of any depth with only&#xD;one atomic item, e.g., (list (list (list (3)))).</comment><header></header><code></code><translations></translations><inputs><input type="%s"></input></inputs><script><block s="doIf"><block s="reportNot"><block s="reportIsA"><block var="x"/><l><option>list</option></l></block></block><script><block s="doReport"><block s="reportBoolean"><l><bool>true</bool></l></block></block></script></block><block s="doReport"><block s="reportEquals"><block s="reportCombine"><custom-block s="shape of $⍴-1-255-255-0 %l"><block var="x"/></custom-block><block s="reifyReporter"><autolambda><block s="reportProduct"><l></l><l></l></block></autolambda><list></list></block></block><l>1</l></block></block></script></block-definition><block-definition s="scalar-value helper %&apos;x&apos;" type="reporter" category="other"><comment x="0" y="0" w="200.66666666666663" collapsed="false">The input must be a value for which SCALAR? reports true, i.e., either an atom or a list of any depth but only one scalar item of item of... etc.  This function returns the underlying scalar (number, etc.).</comment><header></header><code></code><translations></translations><inputs><input type="%s"></input></inputs><script><block s="doIf"><block s="reportNot"><block s="reportIsA"><block var="x"/><l><option>list</option></l></block></block><script><block s="doReport"><block var="x"/></block></script></block><block s="doReport"><custom-block s="scalar-value helper %s"><block s="reportListItem"><l>1</l><block var="x"/></block></custom-block></block></script></block-definition><block-definition s="LCM (and) %&apos;a&apos; $∧-1.2-255-255-0 %&apos;b&apos;" type="reporter" category="operators"><comment x="0" y="0" w="230.66666666666666" collapsed="false">Reports the least common multiple of its inputs.&#xD;If the inputs are values in {0,1} then this is equivalent to the logical AND of the values, with 0=False, 1=True.  Hence the APL symbol ∧.&#xD;Also accepts Snap! Booleans as inputs.</comment><header></header><code></code><translations></translations><inputs><input type="%n"></input><input type="%n"></input></inputs><script><block s="doReport"><block s="evaluate"><custom-block s="scalar -&gt; hyper %repRing"><block s="reifyReporter"><script><block s="doIf"><block s="reportListContainsItem"><block s="reportNewList"><list><l>0</l><block s="reportBoolean"><l><bool>false</bool></l></block></list></block><block var="b"/></block><script><block s="doReport"><block var="b"/></block></script></block><block s="doReport"><block s="reportProduct"><block var="a"/><block s="reportQuotient"><block var="b"/><custom-block s="GCD (or) %n $∨-1.2-255-255-0 %n"><block var="a"/><block var="b"/></custom-block></block></block></block></script><list><l>a</l><l>b</l></list></block></custom-block><list><block var="a"/><block var="b"/></list></block></block></script></block-definition><block-definition s="NAND %&apos;a&apos; $⍲-1.4-255-255-0 %&apos;b&apos;" type="predicate" category="operators"><comment x="0" y="0" w="198.66666666666669" collapsed="false">Reports the not-and of its inputs, in the form&#xD;0 for false, 1 for true.</comment><header></header><code></code><translations></translations><inputs><input type="%s"></input><input type="%s"></input></inputs><script><block s="doReport"><custom-block s="NOT $&#126;-1-255-255-0 %s"><custom-block s="LCM (and) %n $∧-1.2-255-255-0 %n"><block var="a"/><block var="b"/></custom-block></custom-block></block></script></block-definition><block-definition s="NOT $&#126;-1-255-255-0 %&apos;p&apos;" type="reporter" category="operators"><comment x="0" y="0" w="167.33333333333334" collapsed="false">Reports 1 if the input is False or 0;&#xD;otherwise reports 0.</comment><header></header><code></code><translations></translations><inputs><input type="%s"></input></inputs><script><block s="doReport"><block s="reportDifference"><l>1</l><custom-block s="signum $×-1-255-255-0 %n"><block var="p"/></custom-block></block></block></script></block-definition><block-definition s="NOR %&apos;a&apos; $⍱-1.4-255-255-0 %&apos;b&apos;" type="predicate" category="operators"><comment x="0" y="0" w="198.66666666666669" collapsed="false">Reports the not-and of its inputs, in the form&#xD;0 for false, 1 for true.</comment><header></header><code></code><translations></translations><inputs><input type="%s"></input><input type="%s"></input></inputs><script><block s="doReport"><custom-block s="NOT $&#126;-1-255-255-0 %s"><custom-block s="GCD (or) %n $∨-1.2-255-255-0 %n"><block var="a"/><block var="b"/></custom-block></custom-block></block></script></block-definition><block-definition s="%&apos;a&apos; ≤ %&apos;b&apos;" type="predicate" category="operators"><comment x="0" y="0" w="151.33333333333334" collapsed="false">Reports True if the left input is&#xD;less than or equal to the right input.&#xD;&#xD;Reports a Snap! Boolean, not an integer 0 or 1.</comment><header></header><code></code><translations></translations><inputs><input type="%s"></input><input type="%s"></input></inputs><script><block s="doReport"><custom-block s="truth %s"><custom-block s="NOT $&#126;-1-255-255-0 %s"><block s="reportGreaterThan"><block var="a"/><block var="b"/></block></custom-block></custom-block></block></script></block-definition><block-definition s="%&apos;a&apos; ≥ %&apos;b&apos;" type="predicate" category="operators"><comment x="0" y="0" w="152.66666666666666" collapsed="false">Reports True if the left input is&#xD;greater than than or equal to&#xD;the right input.&#xD;&#xD;Reports a Snap! Boolean, not an integer 0 or 1.</comment><header></header><code></code><translations></translations><inputs><input type="%s"></input><input type="%s"></input></inputs><script><block s="doReport"><custom-block s="truth %s"><custom-block s="NOT $&#126;-1-255-255-0 %s"><block s="reportLessThan"><block var="a"/><block var="b"/></block></custom-block></custom-block></block></script></block-definition><block-definition s="XOR %&apos;a&apos; $≠-1-255-255-0 %&apos;b&apos;" type="predicate" category="operators"><comment x="0" y="0" w="190" collapsed="false">Reports 0 if its inputs are equal;&#xD;reports 1 if its inputs are not equal.&#xD;The inputs can have any non-list values.&#xD;(Lists are hyperized.)  If the inputs are&#xD;Booleans (True/False or 1/0), this is&#xD;also the exclusive-or function.</comment><header></header><code></code><translations></translations><inputs><input type="%s"></input><input type="%s"></input></inputs><script><block s="doReport"><custom-block s="%s scalar %s %s"><block var="a"/><l>≠</l><block var="b"/></custom-block></block></script></block-definition><block-definition s="zero? %&apos;n&apos;" type="predicate" category="other"><comment x="0" y="0" w="202.6666666666666" collapsed="true">reports True iff the input is 0 or False.</comment><header></header><code></code><translations></translations><inputs><input type="%n"></input></inputs><script><block s="doReport"><block s="reportListContainsItem"><block s="reportNewList"><list><l>0</l><block s="reportBoolean"><l><bool>false</bool></l></block></list></block><block var="n"/></block></block></script></block-definition><block-definition s="truth %&apos;n&apos;" type="predicate" category="other"><comment x="0" y="0" w="198.66666666666669" collapsed="false">Reports a Snap! Boolean False if the input&#xD;is False or 0; reports True otherwise.</comment><header></header><code></code><translations></translations><inputs><input type="%s"></input></inputs><script><block s="doReport"><block s="reportIfElse"><block s="reportIsA"><block var="n"/><l><option>Boolean</option></l></block><block var="n"/><block s="reportNot"><block s="reportEquals"><block var="n"/><l>0</l></block></block></block></block></script></block-definition><block-definition s="make scalar %&apos;value&apos;" type="reporter" category="operators"><header></header><code></code><translations></translations><inputs><input type="%l"></input></inputs><script><block s="doIf"><custom-block s="scalar? %s"><block var="value"/></custom-block><script><block s="doReport"><custom-block s="scalar-value helper %s"><block var="value"/></custom-block></block></script></block><custom-block s="error %txt"><block s="reportJoinWords"><list><l>Make scalar called with non-singleton input </l><block var="value"/></list></block></custom-block></script></block-definition><block-definition s="$⍳-1.5-255-255-0 %&apos;n&apos;" type="reporter" category="lists"><comment x="0" y="0" w="290.6666666666667" collapsed="false">If the input is a positive integer, reports a list of the numbers&#xD;from 1 to that input.  (If the input is 0, reports an empty list.)&#xD;&#xD;If the input is a list of positive integers, reports an array with&#xD;the shape specified by the input (as in ⍴ reshape) in which&#xD;each item is a list of the indices of that item in the array&#xD;(so technically the shape has one more dimension&#xD;than the input, whose size is the size of the input).</comment><header></header><code></code><translations></translations><inputs><input type="%n"></input></inputs><script><block s="doIfElse"><block s="reportIsA"><block var="n"/><l><option>list</option></l></block><script><block s="doIfElse"><block s="reportEquals"><custom-block s="rank of $⍴⍴-1-255-255-0 %l"><block var="n"/></custom-block><l>1</l></block><script><block s="doIfElse"><custom-block s="zero? %n"><custom-block s="combine in rows (reduce by column vectors) %repRing $/-1-255-255-0 %l"><block s="reifyReporter"><autolambda><block s="reportProduct"><l></l><l></l></block></autolambda><list></list></block><block var="n"/></custom-block></custom-block><script><block s="doReport"><block s="reportNewList"><list></list></block></block></script><script><block s="doReport"><custom-block s="reshape helper %l %l"><block var="n"/><custom-block s="crossproduct %mult%l"><block s="reportMap"><block s="reifyReporter"><autolambda><custom-block s="$⍳-1.5-255-255-0 %n"><l></l></custom-block></autolambda><list></list></block><block var="n"/></block></custom-block></custom-block></block></script></block></script><script><custom-block s="error %txt"><l>Input to ⍳ can&apos;t be a list of lists.</l></custom-block></script></block></script><script><block s="doReport"><block s="reportIfElse"><custom-block s="zero? %n"><block var="n"/></custom-block><block s="reportNewList"><list></list></block><block s="reportNumbers"><l>1</l><block var="n"/></block></block></block></script></block></script></block-definition><block-definition s="where in %&apos;vector&apos; is $⍳-1.5-255-255-0 %&apos;items&apos;" type="reporter" category="lists"><comment x="0" y="0" w="334.6666666666667" collapsed="false">If the rank of the left input is one more than the rank of the right input,&#xD;reports the index of the right input in the left input, or if not found,&#xD;reports one more than the length of the left input.&#xD;&#xD;If the rank of the left input is equal to the rank of the right input,&#xD;reports a vector of the indices of the items of the right input&#xD;in the left input (mapping this function over the right input).&#xD;&#xD;If the rank of the left input is more than that of the right input by 2 or more,&#xD;reports a vector, the location of the right input in the left in each dimension.&#xD;&#xD;It is an error if the rank of the left input is less than that of the right input.</comment><header></header><code></code><translations></translations><inputs><input type="%l"></input><input type="%s"></input></inputs><script><block s="doDeclareVariables"><list><l>result</l></list></block><block s="doIf"><block s="reportLessThan"><custom-block s="rank of $⍴⍴-1-255-255-0 %l"><block var="vector"/></custom-block><custom-block s="rank of $⍴⍴-1-255-255-0 %l"><block var="items"/></custom-block></block><script><custom-block s="error %txt"><l>Left input to ⍳ must have greater or equal rank to right input.</l></custom-block></script></block><block s="doIf"><block s="reportEquals"><custom-block s="rank of $⍴⍴-1-255-255-0 %l"><block var="vector"/></custom-block><custom-block s="rank of $⍴⍴-1-255-255-0 %l"><block var="items"/></custom-block></block><script><block s="doReport"><block s="reportMap"><block s="reifyReporter"><autolambda><custom-block s="where in %l is $⍳-1.5-255-255-0 %s"><block var="vector"/><l></l></custom-block></autolambda><list></list></block><block var="items"/></block></block></script></block><block s="doIf"><block s="reportEquals"><custom-block s="rank of $⍴⍴-1-255-255-0 %l"><block var="vector"/></custom-block><block s="reportSum"><custom-block s="rank of $⍴⍴-1-255-255-0 %l"><block var="items"/></custom-block><l>1</l></block></block><script><block s="doSetVar"><l>result</l><block s="reportListIndex"><block var="items"/><block var="vector"/></block></block><block s="doReport"><block s="reportIfElse"><custom-block s="zero? %n"><block var="result"/></custom-block><block s="reportSum"><block s="reportListLength"><block var="vector"/></block><l>1</l></block><block var="result"/></block></block></script></block><block s="doSetVar"><l>result</l><block s="reportFindFirst"><block s="reifyPredicate"><autolambda><custom-block s="%l deep contains %s"><l/><block var="items"/></custom-block></autolambda><list></list></block><block var="vector"/></block></block><block s="doIf"><block s="reportEquals"><block var="result"/><l></l></block><script><block s="doReport"><block s="reportSum"><custom-block s="shape of $⍴-1-255-255-0 %l"><block var="vector"/></custom-block><l>1</l></block></block></script></block><block s="doReport"><block s="reportCONS"><block s="reportListIndex"><block var="result"/><block var="vector"/></block><custom-block s="flatten (ravel) $,-1-255-255-0 %l"><custom-block s="where in %l is $⍳-1.5-255-255-0 %s"><block var="result"/><block var="items"/></custom-block></custom-block></block></block></script></block-definition><block-definition s="crossproduct %&apos;lists&apos;" type="reporter" category="lists"><comment x="0" y="0" w="305.3333333333333" collapsed="false">This isn&apos;t an APL function, although it&apos;s related to the outer product.&#xD;&#xD;It takes any number of lists, and reports a list of all possible tuples with one item from each of the lists.  The length of the result is the product of the lengths of the inputs.</comment><header></header><code></code><translations></translations><inputs><input type="%mult%l"></input></inputs><script><block s="doIfElse"><block s="reportListIsEmpty"><block var="lists"/></block><script><block s="doReport"><block s="reportNewList"><list><block s="reportNewList"><list></list></block></list></block></block></script><script><block s="doDeclareVariables"><list><l>small</l></list></block><block s="doSetVar"><l>small</l><custom-block s="crossproduct %mult%l"><block s="reportCDR"><block var="lists"/></block></custom-block></block><block s="doReport"><block s="reportConcatenatedLists"><block s="reportMap"><block s="reifyReporter"><autolambda><block s="reportMap"><block s="reifyReporter"><autolambda><block s="reportCONS"><block var="newitem"/><l/></block></autolambda><list></list></block><block var="small"/></block></autolambda><list><l>newitem</l></list></block><block s="reportListItem"><l>1</l><block var="lists"/></block></block></block></block></script></block></script></block-definition><block-definition s="%&apos;array&apos; deep contains %&apos;value&apos;" type="reporter" category="other"><header></header><code></code><translations></translations><inputs><input type="%l"></input><input type="%s"></input></inputs><script><block s="doIf"><block s="reportNot"><block s="reportIsA"><block var="array"/><l><option>list</option></l></block></block><script><block s="doReport"><block s="reportBoolean"><l><bool>false</bool></l></block></block></script></block><block s="doIf"><block s="reportListContainsItem"><block var="array"/><block var="value"/></block><script><block s="doReport"><block s="reportBoolean"><l><bool>true</bool></l></block></block></script></block><block s="doReport"><custom-block s="combine in rows (reduce by column vectors) %repRing $/-1-255-255-0 %l"><block s="reifyReporter"><autolambda><block s="reportOr"><l/><l/></block></autolambda><list></list></block><block s="reportMap"><block s="reifyReporter"><autolambda><custom-block s="%l deep contains %s"><l/><block var="value"/></custom-block></autolambda><list></list></block><block var="array"/></block></custom-block></block></script></block-definition><block-definition s="which of %&apos;items&apos; $ϵ-1-255-255-0 contained in %&apos;array&apos;" type="reporter" category="lists"><comment x="0" y="0" w="214.66666666666666" collapsed="false">Reports an array of Booleans the same shape&#xD;as the left input, indicating which of the atoms&#xD;in the left input appear anywhere in the right&#xD;input.  &#xD;(The structure of the right input doesn&apos;t matter.)</comment><header></header><code></code><translations></translations><inputs><input type="%s"></input><input type="%l"></input></inputs><script><block s="doIfElse"><block s="reportIsA"><block var="items"/><l><option>list</option></l></block><script><block s="doReport"><block s="reportMap"><block s="reifyReporter"><autolambda><custom-block s="which of %s $ϵ-1-255-255-0 contained in %l"><l></l><block var="array"/></custom-block></autolambda><list></list></block><block var="items"/></block></block></script><script><block s="doReport"><block s="reportListContainsItem"><custom-block s="flatten (ravel) $,-1-255-255-0 %l"><block var="array"/></custom-block><block var="items"/></block></block></script></block></script></block-definition><block-definition s="catenate %&apos;left&apos; $,-1-255-255-0 %&apos;right&apos;" type="reporter" category="lists"><comment x="0" y="0" w="190.66666666666663" collapsed="false">Like append, but:&#xD;&#xD;A scalar input is treated as an array the same shape as the other input except that the last item of the shape is 1.&#xD;&#xD;If the two inputs are of different ranks,&#xD;the function is mapped over the larger ranked input.&#xD;&#xD;Catenate adds new columns, by appending to each row.</comment><header></header><code></code><translations></translations><inputs><input type="%s"></input><input type="%s"></input></inputs><script><block s="doIf"><block s="reportNot"><block s="reportIsA"><block var="left"/><l><option>list</option></l></block></block><script><block s="doIfElse"><block s="reportGreaterThan"><custom-block s="rank of $⍴⍴-1-255-255-0 %l"><block var="right"/></custom-block><l>1</l></block><script><block s="doSetVar"><l>left</l><custom-block s="reshape as %l $⍴-1-255-255-0 items of %l"><block s="reportConcatenatedLists"><list><custom-block s="drop %n $↓-1-255-255-0 from %l"><l>-1</l><custom-block s="shape of $⍴-1-255-255-0 %l"><block var="right"/></custom-block></custom-block><block s="reportNewList"><list><l>1</l></list></block></list></block><block s="reportNewList"><list><block var="left"/></list></block></custom-block></block></script><script><block s="doSetVar"><l>left</l><block s="reportNewList"><list><block var="left"/></list></block></block></script></block></script></block><block s="doIf"><block s="reportNot"><block s="reportIsA"><block var="right"/><l><option>list</option></l></block></block><script><block s="doIfElse"><block s="reportGreaterThan"><custom-block s="rank of $⍴⍴-1-255-255-0 %l"><block var="left"/></custom-block><l>1</l></block><script><block s="doSetVar"><l>right</l><custom-block s="reshape as %l $⍴-1-255-255-0 items of %l"><block s="reportConcatenatedLists"><list><custom-block s="drop %n $↓-1-255-255-0 from %l"><l>-1</l><custom-block s="shape of $⍴-1-255-255-0 %l"><block var="left"/></custom-block></custom-block><block s="reportNewList"><list><l>1</l></list></block></list></block><block s="reportNewList"><list><block var="right"/></list></block></custom-block></block></script><script><block s="doSetVar"><l>right</l><block s="reportNewList"><list><block var="right"/></list></block></block></script></block></script></block><block s="doIf"><block s="reportEquals"><custom-block s="rank of $⍴⍴-1-255-255-0 %l"><block var="left"/></custom-block><custom-block s="rank of $⍴⍴-1-255-255-0 %l"><block var="right"/></custom-block></block><script><block s="doIfElse"><block s="reportEquals"><custom-block s="rank of $⍴⍴-1-255-255-0 %l"><block var="left"/></custom-block><l>1</l></block><script><block s="doReport"><block s="reportConcatenatedLists"><list><block var="left"/><block var="right"/></list></block></block></script><script><block s="doReport"><custom-block s="multimap %repRing %mult%l"><block s="reifyReporter"><autolambda><custom-block s="catenate %s $,-1-255-255-0 %s"><l></l><l></l></custom-block></autolambda><list></list></block><list><block var="left"/><block var="right"/></list></custom-block></block></script></block></script></block><block s="doIfElse"><block s="reportLessThan"><custom-block s="rank of $⍴⍴-1-255-255-0 %l"><block var="left"/></custom-block><custom-block s="rank of $⍴⍴-1-255-255-0 %l"><block var="right"/></custom-block></block><script><block s="doReport"><block s="reportMap"><block s="reifyReporter"><autolambda><custom-block s="catenate %s $,-1-255-255-0 %s"><block var="left"/><l></l></custom-block></autolambda><list></list></block><block var="right"/></block></block></script><script><block s="doReport"><block s="reportMap"><block s="reifyReporter"><autolambda><custom-block s="catenate %s $,-1-255-255-0 %s"><l></l><block var="right"/></custom-block></autolambda><list></list></block><block var="left"/></block></block></script></block></script></block-definition><block-definition s="scalar value %&apos;value&apos;" type="reporter" category="lists"><comment x="0" y="0" w="221.33333333333334" collapsed="false">If the input is a nesting of length=1 lists, which&#xD;APL treats as a scalar (the innermost item)&#xD;for many purposes, report that innermost scalar.&#xD;Otherwise, report the input as is.&#xD;&#xD;Exposing this block for users is important because Snap! /does not/ treat such a nesting&#xD;as a scalar, so you might need to use this in&#xD;translating an APL program to Snap!.&#xD;(But the functions in the APL library already use&#xD;this block as needed.)</comment><header></header><code></code><translations></translations><inputs><input type="%s"></input></inputs><script><block s="doReport"><block s="reportIfElse"><custom-block s="scalar? %s"><block var="value"/></custom-block><custom-block s="scalar-value helper %s"><block var="value"/></custom-block><block var="value"/></block></block></script></block-definition><block-definition s="grade up $⍋-1.5-255-255-0 %&apos;array&apos;" type="reporter" category="lists"><comment x="0" y="0" w="190.66666666666663" collapsed="false">Reports a vector of indices of the items of the input, in order of the values of the items, so that&#xD;&#xD;item (grade up (foo)) of (foo)&#xD;&#xD;reports the items in sorted order, smallest to largest.  For a matrix, sorts the rows based on their first items, or if those are equal, based on their second items, etc.</comment><header></header><code></code><translations></translations><inputs><input type="%l"></input></inputs><script><block s="doReport"><block s="reportMap"><block s="reifyReporter"><autolambda><block s="reportListItem"><l><option>last</option></l><l/></block></autolambda><list></list></block><custom-block s="sort %l ordering with %predRing"><custom-block s="multimap %repRing %mult%l"><block s="reifyReporter"><autolambda><custom-block s="catenate %s $,-1-255-255-0 %s"><l></l><l></l></custom-block></autolambda><list></list></block><list><block var="array"/><custom-block s="$⍳-1.5-255-255-0 %n"><block s="reportListLength"><block var="array"/></block></custom-block></list></custom-block><block s="reifyPredicate"><autolambda><custom-block s="sort helper %l %l"><l/><l/></custom-block></autolambda><list></list></block></custom-block></block></block></script></block-definition><block-definition s="sort %&apos;data&apos; ordering with %&apos;function&apos;" type="reporter" category="other"><comment x="0" y="0" w="161.14285714285708" collapsed="false">Reports a sorted version of the list in its first input slot, using the comparison function in the second input slot.  For a list of numbers, using &lt; as the comparison function will sort from low to high; using &gt; will sort from high to low.</comment><header></header><code></code><translations>ca:ordena _ segons criteri _&#xD;</translations><inputs><input type="%l"></input><input type="%predRing"></input></inputs><script><block s="doDeclareVariables"><list><l>even items</l><l>odd items</l><l>merge</l><l>split</l><l>copy of data</l><l>id</l></list></block><block s="doSetVar"><l>id</l><block s="reifyScript"><script><block s="doReport"><l></l></block></script><list></list></block></block><block s="doSetVar"><l>copy of data</l><block s="reportMap"><block var="id"/><block var="data"/></block></block><block s="doSetVar"><l>split</l><block s="reifyScript"><script><block s="doSetVar"><l>even items</l><block s="reportNewList"><list></list></block></block><block s="doSetVar"><l>odd items</l><block s="reportNewList"><list></list></block></block><block s="doUntil"><block s="reportListIsEmpty"><block var="copy of data"/></block><script><block s="doAddToList"><block s="reportListItem"><l>1</l><block var="copy of data"/></block><block var="odd items"/></block><block s="doDeleteFromList"><l>1</l><block var="copy of data"/></block><block s="doIf"><block s="reportNot"><block s="reportListIsEmpty"><block var="copy of data"/></block></block><script><block s="doAddToList"><block s="reportListItem"><l>1</l><block var="copy of data"/></block><block var="even items"/></block><block s="doDeleteFromList"><l>1</l><block var="copy of data"/></block></script></block></script></block></script><list></list></block></block><block s="doSetVar"><l>merge</l><block s="reifyScript"><script><block s="doIf"><block s="reportEquals"><block var="#1"/><block s="reportNewList"><list></list></block></block><script><block s="doReport"><block var="#2"/></block></script></block><block s="doIf"><block s="reportEquals"><block var="#2"/><block s="reportNewList"><list></list></block></block><script><block s="doReport"><block var="#1"/></block></script></block><block s="doIfElse"><block s="evaluate"><block var="function"/><list><block s="reportListItem"><l>1</l><block var="#1"/></block><block s="reportListItem"><l>1</l><block var="#2"/></block></list></block><script><block s="doReport"><block s="reportCONS"><block s="reportListItem"><l>1</l><block var="#1"/></block><block s="evaluate"><block var="merge"/><list><block s="reportCDR"><block var="#1"/></block><block var="#2"/></list></block></block></block></script><script><block s="doReport"><block s="reportCONS"><block s="reportListItem"><l>1</l><block var="#2"/></block><block s="evaluate"><block var="merge"/><list><block var="#1"/><block s="reportCDR"><block var="#2"/></block></list></block></block></block></script></block></script><list><l>#1</l><l>#2</l></list></block></block><block s="doIf"><block s="reportEquals"><block var="data"/><block s="reportNewList"><list></list></block></block><script><block s="doReport"><block s="reportNewList"><list></list></block></block></script></block><block s="doIf"><block s="reportEquals"><block s="reportCDR"><block var="data"/></block><block s="reportNewList"><list></list></block></block><script><block s="doReport"><block var="data"/></block></script></block><block s="doRun"><block var="split"/><list></list></block><block s="doReport"><block s="evaluate"><block var="merge"/><list><custom-block s="sort %l ordering with %predRing"><block var="odd items"/><block var="function"/></custom-block><custom-block s="sort %l ordering with %predRing"><block var="even items"/><block var="function"/></custom-block></list></block></block></script></block-definition><block-definition s="sort helper %&apos;rowA&apos; %&apos;rowB&apos;" type="reporter" category="other"><comment x="0" y="0" w="166" collapsed="false">Compares two vectors for sorting.&#xD;Compare first items; if those are equal compare second items; etc.</comment><header></header><code></code><translations></translations><inputs><input type="%l"></input><input type="%l"></input></inputs><script><block s="doIf"><block s="reportListIsEmpty"><block var="rowA"/></block><script><block s="doReport"><block s="reportBoolean"><l><bool>true</bool></l></block></block></script></block><block s="doIf"><block s="reportListIsEmpty"><block var="rowB"/></block><script><block s="doReport"><block s="reportBoolean"><l><bool>false</bool></l></block></block></script></block><block s="doIf"><block s="reportLessThan"><block s="reportListItem"><l>1</l><block var="rowA"/></block><block s="reportListItem"><l>1</l><block var="rowB"/></block></block><script><block s="doReport"><block s="reportBoolean"><l><bool>true</bool></l></block></block></script></block><block s="doIf"><block s="reportGreaterThan"><block s="reportListItem"><l>1</l><block var="rowA"/></block><block s="reportListItem"><l>1</l><block var="rowB"/></block></block><script><block s="doReport"><block s="reportBoolean"><l><bool>false</bool></l></block></block></script></block><block s="doReport"><custom-block s="sort helper %l %l"><block s="reportCDR"><block var="rowA"/></block><block s="reportCDR"><block var="rowB"/></block></custom-block></block></script></block-definition><block-definition s="grade down $⍒-1.5-255-255-0 %&apos;array&apos;" type="reporter" category="lists"><comment x="0" y="0" w="190.66666666666663" collapsed="false">Reports a vector of indices of the items of the input, in order of the values of the items, so that&#xD;&#xD;item (grade down (foo)) of (foo)&#xD;&#xD;reports the items in sorted order, largest to smallest.  For a matrix, sorts the rows based on their first items, or if those are equal, based on their second items, etc.</comment><header></header><code></code><translations></translations><inputs><input type="%l"></input></inputs><script><block s="doReport"><block s="reportMap"><block s="reifyReporter"><autolambda><block s="reportListItem"><l><option>last</option></l><l/></block></autolambda><list></list></block><custom-block s="sort %l ordering with %predRing"><custom-block s="multimap %repRing %mult%l"><block s="reifyReporter"><autolambda><custom-block s="catenate %s $,-1-255-255-0 %s"><l></l><l></l></custom-block></autolambda><list></list></block><list><block var="array"/><custom-block s="$⍳-1.5-255-255-0 %n"><block s="reportListLength"><block var="array"/></block></custom-block></list></custom-block><block s="reifyPredicate"><autolambda><custom-block s="NOT $&#126;-1-255-255-0 %s"><custom-block s="sort helper %l %l"><l/><l/></custom-block></custom-block></autolambda><list></list></block></custom-block></block></block></script></block-definition><block-definition s="select rows (compress columns) %&apos;Booleans&apos; $/-1-255-255-0 %&apos;array&apos;" type="reporter" category="lists"><comment x="0" y="0" w="210.66666666666663" collapsed="false">The left input must be a vector of Booleans&#xD;(either Snap! form or APL form); the right input must be an array whose first dimension is equal to the length of the left input.  The block reports an array of the same rank as the right input, containing only those items (rows, for a matrix) for which the corresponding Boolean is True (or 1).</comment><header></header><code></code><translations></translations><inputs><input type="%l"></input><input type="%l"></input></inputs><script><block s="doReport"><custom-block s="rowize vector %l"><block s="reportMap"><block s="reifyReporter"><autolambda><block s="reportCDR"><l/></block></autolambda><list></list></block><block s="reportKeep"><block s="reifyPredicate"><autolambda><custom-block s="truth %s"><block s="reportListItem"><l>1</l><l/></block></custom-block></autolambda><list></list></block><custom-block s="multimap %repRing %mult%l"><block s="reifyReporter"><autolambda><custom-block s="catenate %s $,-1-255-255-0 %s"><l></l><l></l></custom-block></autolambda><list></list></block><list><block var="Booleans"/><block var="array"/></list></custom-block></block></block></custom-block></block></script></block-definition><block-definition s="rowize vector %&apos;vec&apos;" type="reporter" category="other"><header></header><code></code><translations></translations><inputs><input type="%l"></input></inputs><script><block s="doReport"><block s="reportIfElse"><block s="reportAnd"><block s="reportEquals"><custom-block s="rank of $⍴⍴-1-255-255-0 %l"><block var="vec"/></custom-block><l>2</l></block><block s="reportEquals"><block s="reportListItem"><l>2</l><custom-block s="shape of $⍴-1-255-255-0 %l"><block var="vec"/></custom-block></block><l>1</l></block></block><block s="reportMap"><block s="reifyReporter"><autolambda><block s="reportListItem"><l>1</l><l/></block></autolambda><list></list></block><block var="vec"/></block><block var="vec"/></block></block></script></block-definition><block-definition s="select columns (compress rows) %&apos;bool&apos; $⌿-1.5-255-255-0 %&apos;array&apos;" type="reporter" category="lists"><comment x="0" y="0" w="219.33333333333337" collapsed="false">The left input must be a vector of Booleans&#xD;(either Snap! form or APL form); the right input must be an array whose last dimension is equal to the length of the left input.  The block reports an array of the same rank as the right input, containing only those items (columns, for a matrix) for which the corresponding Boolean is True (or 1).</comment><header></header><code></code><translations></translations><inputs><input type="%l"></input><input type="%l"></input></inputs><script><block s="doReport"><custom-block s="columnwise %repRing %l"><block s="reifyReporter"><autolambda><custom-block s="select rows (compress columns) %l $/-1-255-255-0 %l"><block var="bool"/><l/></custom-block></autolambda><list></list></block><block var="array"/></custom-block></block></script></block-definition><block-definition s="columnwise %&apos;function&apos; %&apos;data&apos;" type="reporter" category="control"><comment x="0" y="0" w="211.99999999999997" collapsed="false">Turns a row-wise (in Lisp terminology) function&#xD;into a column-wise one.</comment><header></header><code></code><translations></translations><inputs><input type="%repRing"></input><input type="%l"></input></inputs><script><block s="doReport"><custom-block s="rowize vector %l"><custom-block s="transpose $⍉-1.5-255-255-0 %l"><block s="evaluate"><block var="function"/><list><custom-block s="transpose $⍉-1.5-255-255-0 %l"><block var="data"/></custom-block></list></block></custom-block></custom-block></block></script></block-definition><block-definition s="reverse column order (row contents) $⏀-1-255-255-0 %&apos;array&apos;" type="reporter" category="lists"><comment x="0" y="0" w="206" collapsed="false">Reverses the order of the columns of the input, which is a reflection through a vertical axis, as the ⏀ symbol suggests.</comment><header></header><code></code><translations></translations><inputs><input type="%l"></input></inputs><script><block s="doReport"><custom-block s="columnwise %repRing %l"><block s="reifyReporter"><autolambda><custom-block s="reverse row order (column contents) $⦵-1.5-255-255-0 %l"><l/></custom-block></autolambda><list></list></block><block var="array"/></custom-block></block></script></block-definition><block-definition s="combine in columns (reduce by row vectors) %&apos;function&apos; $⌿-1.5-255-255-0 %&apos;array&apos;" type="reporter" category="lists"><comment x="0" y="0" w="285.3333333333333" collapsed="false">This function has two names because there are two ways&#xD;to understand it.&#xD;&#xD;Lisp way:  A matrix is a list of rows.  This block turns it into a list of columns, and combines the numbers in each column, producing one value for the entire column.&#xD;&#xD;APL way:  A matrix is made of vectors.  This block takes each row as a vector, and does vector arithmetic on the rows, producing one row as the result.</comment><header></header><code></code><translations></translations><inputs><input type="%repRing"></input><input type="%l"></input></inputs><script><block s="doReport"><custom-block s="columnwise %repRing %l"><block s="reifyReporter"><autolambda><custom-block s="combine in rows (reduce by column vectors) %repRing $/-1-255-255-0 %l"><block var="function"/><l/></custom-block></autolambda><list></list></block><block var="array"/></custom-block></block></script></block-definition><block-definition s="catenate vertically %&apos;left&apos; $⍪-1.5-255-255-0 %&apos;right&apos;" type="reporter" category="lists"><comment x="0" y="0" w="190.66666666666663" collapsed="false">Like append, but:&#xD;&#xD;A scalar input is treated as a vector&#xD;of length 1.&#xD;&#xD;If the two inputs are of different ranks,&#xD;the function is mapped over the larger ranked input.&#xD;&#xD;Catenate vertically adds new rows, by appending to each column.</comment><header></header><code></code><translations></translations><inputs><input type="%s"></input><input type="%s"></input></inputs><script><block s="doIf"><block s="reportNot"><block s="reportIsA"><block var="left"/><l><option>list</option></l></block></block><script><block s="doIfElse"><block s="reportGreaterThan"><custom-block s="rank of $⍴⍴-1-255-255-0 %l"><block var="right"/></custom-block><l>1</l></block><script><block s="doSetVar"><l>left</l><custom-block s="reshape as %l $⍴-1-255-255-0 items of %l"><block s="reportConcatenatedLists"><list><block s="reportNewList"><list><l>1</l></list></block><custom-block s="drop %n $↓-1-255-255-0 from %l"><l>1</l><custom-block s="shape of $⍴-1-255-255-0 %l"><block var="right"/></custom-block></custom-block></list></block><block s="reportNewList"><list><block var="left"/></list></block></custom-block></block></script><script><block s="doSetVar"><l>left</l><block s="reportNewList"><list><block var="left"/></list></block></block></script></block></script></block><block s="doIf"><block s="reportNot"><block s="reportIsA"><block var="right"/><l><option>list</option></l></block></block><script><block s="doIfElse"><block s="reportGreaterThan"><custom-block s="rank of $⍴⍴-1-255-255-0 %l"><block var="left"/></custom-block><l>1</l></block><script><block s="doSetVar"><l>right</l><custom-block s="reshape as %l $⍴-1-255-255-0 items of %l"><block s="reportConcatenatedLists"><list><block s="reportNewList"><list><l>1</l></list></block><custom-block s="drop %n $↓-1-255-255-0 from %l"><l>1</l><custom-block s="shape of $⍴-1-255-255-0 %l"><block var="left"/></custom-block></custom-block></list></block><block s="reportNewList"><list><block var="right"/></list></block></custom-block></block></script><script><block s="doSetVar"><l>right</l><block s="reportNewList"><list><block var="right"/></list></block></block></script></block></script></block><block s="doIf"><block s="reportEquals"><custom-block s="rank of $⍴⍴-1-255-255-0 %l"><block var="left"/></custom-block><custom-block s="rank of $⍴⍴-1-255-255-0 %l"><block var="right"/></custom-block></block><script><block s="doIfElse"><block s="reportEquals"><custom-block s="rank of $⍴⍴-1-255-255-0 %l"><block var="left"/></custom-block><l>1</l></block><script><block s="doReport"><block s="reportConcatenatedLists"><list><block var="left"/><block var="right"/></list></block></block></script><script><block s="doReport"><custom-block s="transpose $⍉-1.5-255-255-0 %l"><custom-block s="catenate %s $,-1-255-255-0 %s"><custom-block s="transpose $⍉-1.5-255-255-0 %l"><block var="left"/></custom-block><custom-block s="transpose $⍉-1.5-255-255-0 %l"><block var="right"/></custom-block></custom-block></custom-block></block></script></block></script></block><block s="doIfElse"><block s="reportLessThan"><custom-block s="rank of $⍴⍴-1-255-255-0 %l"><block var="left"/></custom-block><custom-block s="rank of $⍴⍴-1-255-255-0 %l"><block var="right"/></custom-block></block><script><block s="doReport"><block s="reportMap"><block s="reifyReporter"><autolambda><custom-block s="catenate %s $,-1-255-255-0 %s"><block var="left"/><l></l></custom-block></autolambda><list></list></block><block var="right"/></block></block></script><script><block s="doReport"><block s="reportMap"><block s="reifyReporter"><autolambda><custom-block s="catenate %s $,-1-255-255-0 %s"><l></l><block var="right"/></custom-block></autolambda><list></list></block><block var="left"/></block></block></script></block></script><scripts><script x="253.99999999999997" y="497.77777777777754"><custom-block s="multimap %repRing %mult%l"><block s="reifyReporter"><script></script><list></list></block><list><l/><l/></list></custom-block></script></scripts></block-definition><block-definition s="%&apos;a&apos; scalar join %&apos;b&apos;" type="reporter" category="operators"><comment x="0" y="0" w="219.33333333333337" collapsed="false">A hyperblock version of JOIN.  The regular JOIN isn&apos;t hyperized because it can accept a list as input, representing it as text.</comment><header></header><code></code><translations></translations><inputs><input type="%s"></input><input type="%s"></input></inputs><script><block s="doReport"><block s="evaluate"><custom-block s="scalar -&gt; hyper %repRing"><block s="reifyReporter"><autolambda><block s="reportJoinWords"><list><l></l><l></l></list></block></autolambda><list></list></block></custom-block><list><block var="a"/><block var="b"/></list></block></block></script></block-definition><block-definition s="take %&apos;howmany&apos; $↑-1-255-255-0 from %&apos;array&apos;" type="reporter" category="lists"><comment x="0" y="0" w="272" collapsed="false">A positive left input selects the first n items of the right input.&#xD;A negative left input selects the last abs(n) items&#xD;of the right input.&#xD;&#xD;If the right input is a matrix, a numeric left input selects rows;&#xD;the left input may also be a two-item vector, in which case&#xD;the first number is applied to the rows&#xD;and the second number is applied to the columns.&#xD;Similarly for higher-dimension arrays. </comment><header></header><code></code><translations></translations><inputs><input type="%n"></input><input type="%l"></input></inputs><script><block s="doIf"><block s="reportIsA"><block var="howmany"/><l><option>number</option></l></block><script><block s="doReport"><block s="reportIfElse"><block s="reportLessThan"><block var="howmany"/><l>0</l></block><block s="reportListItem"><block s="reportSum"><custom-block s="$⍳-1.5-255-255-0 %n"><block s="reportMonadic"><l><option>abs</option></l><block var="howmany"/></block></custom-block><block s="reportSum"><block s="reportListLength"><block var="array"/></block><block var="howmany"/></block></block><block var="array"/></block><block s="reportListItem"><custom-block s="$⍳-1.5-255-255-0 %n"><block var="howmany"/></custom-block><block var="array"/></block></block></block></script></block><block s="doIf"><block s="reportGreaterThan"><custom-block s="rank of $⍴⍴-1-255-255-0 %l"><block var="howmany"/></custom-block><l>1</l></block><script><custom-block s="error %txt"><l>Left input to take can&apos;t be a matrix.</l></custom-block></script></block><block s="doIf"><block s="reportGreaterThan"><block s="reportListLength"><block var="howmany"/></block><custom-block s="rank of $⍴⍴-1-255-255-0 %l"><block var="array"/></custom-block></block><script><custom-block s="error %txt"><l>Length of item vector &gt; rank of array in take.</l></custom-block></script></block><block s="doReport"><block s="reportListItem"><custom-block s="reverse row order (column contents) $⦵-1.5-255-255-0 %l"><block s="reportMap"><block s="reifyReporter"><autolambda><block s="reportIfElse"><block s="reportLessThan"><block var="value"/><l>0</l></block><block s="reportSum"><custom-block s="$⍳-1.5-255-255-0 %n"><block s="reportMonadic"><l><option>abs</option></l><block var="value"/></block></custom-block><block s="reportSum"><block s="reportListItem"><block var="index"/><custom-block s="shape of $⍴-1-255-255-0 %l"><block var="array"/></custom-block></block><block var="value"/></block></block><custom-block s="$⍳-1.5-255-255-0 %n"><block var="value"/></custom-block></block></autolambda><list><l>value</l><l>index</l></list></block><block var="howmany"/></block></custom-block><block var="array"/></block></block></script></block-definition><block-definition s="drop %&apos;howmany&apos; $↓-1-255-255-0 from %&apos;array&apos;" type="reporter" category="lists"><comment x="0" y="0" w="306" collapsed="false">A positive left input selects all but the first n items of the right input.&#xD;A negative left input selects all but the last abs(n) items&#xD;of the right input.&#xD;&#xD;If the right input is a matrix, a numeric left input selects rows;&#xD;the left input may also be a two-item vector, in which case&#xD;the first number is applied to the rows&#xD;and the second number is applied to the columns.&#xD;Similarly for higher-dimension arrays. </comment><header></header><code></code><translations></translations><inputs><input type="%n"></input><input type="%l"></input></inputs><script><block s="doIf"><block s="reportIsA"><block var="howmany"/><l><option>number</option></l></block><script><block s="doReport"><custom-block s="take %n $↑-1-255-255-0 from %l"><block s="reportProduct"><block s="reportMonadic"><l><option>neg</option></l><custom-block s="signum $×-1-255-255-0 %n"><block var="howmany"/></custom-block></block><block s="reportDifference"><block s="reportListLength"><block var="array"/></block><block s="reportMonadic"><l><option>abs</option></l><block var="howmany"/></block></block></block><block var="array"/></custom-block></block></script></block><block s="doReport"><custom-block s="take %n $↑-1-255-255-0 from %l"><block s="reportMap"><block s="reifyReporter"><autolambda><block s="reportIfElse"><block s="reportLessThan"><block var="value"/><l>0</l></block><block s="reportSum"><block s="reportListItem"><block var="index"/><custom-block s="shape of $⍴-1-255-255-0 %l"><block var="array"/></custom-block></block><block var="value"/></block><block s="reportDifference"><block var="value"/><block s="reportListItem"><block var="index"/><custom-block s="shape of $⍴-1-255-255-0 %l"><block var="array"/></custom-block></block></block></block></autolambda><list><l>value</l><l>index</l></list></block><block var="howmany"/></block><block var="array"/></custom-block></block></script></block-definition><block-definition s="reshape helper %&apos;shape&apos; %&apos;data&apos;" type="reporter" category="other"><header></header><code></code><translations></translations><inputs><input type="%l"></input><input type="%l"></input></inputs><script><block s="doIf"><block s="reportListIsEmpty"><block var="shape"/></block><script><block s="doReport"><block s="reportNewList"><list></list></block></block></script></block><block s="doIf"><block s="reportEquals"><block s="reportCombine"><block var="shape"/><block s="reifyReporter"><autolambda><block s="reportProduct"><l></l><l></l></block></autolambda><list></list></block></block><l>0</l></block><script><block s="doReport"><block s="reportNewList"><list></list></block></block></script></block><block s="doDeclareVariables"><list><l>partial</l></list></block><block s="doSetVar"><l>partial</l><block s="reportNewList"><list></list></block></block><block s="doIfElse"><block s="reportListIsEmpty"><block s="reportCDR"><block var="shape"/></block></block><script><block s="doRepeat"><block s="reportListItem"><l>1</l><block var="shape"/></block><script><block s="doAddToList"><block s="reportListItem"><l>1</l><block var="data"/></block><block var="partial"/></block><block s="doSetVar"><l>data</l><block s="reportConcatenatedLists"><list><block s="reportCDR"><block var="data"/></block><block s="reportNewList"><list><block s="reportListItem"><l>1</l><block var="data"/></block></list></block></list></block></block></script></block></script><script><block s="doRepeat"><block s="reportListItem"><l>1</l><block var="shape"/></block><script><block s="doAddToList"><custom-block s="reshape helper %l %l"><block s="reportCDR"><block var="shape"/></block><block var="data"/></custom-block><block var="partial"/></block><block s="doRepeat"><block s="reportModulus"><block s="reportCombine"><block s="reportCDR"><block var="shape"/></block><block s="reifyReporter"><autolambda><block s="reportProduct"><l></l><l></l></block></autolambda><list></list></block></block><block s="reportListLength"><block var="data"/></block></block><script><block s="doSetVar"><l>data</l><block s="reportConcatenatedLists"><list><block s="reportCDR"><block var="data"/></block><block s="reportNewList"><list><block s="reportListItem"><l>1</l><block var="data"/></block></list></block></list></block></block></script></block></script></block></script></block><block s="doReport"><block var="partial"/></block></script></block-definition><block-definition s="deep map %&apos;function&apos; %&apos;atom?&apos; %&apos;data&apos;" type="reporter" category="other"><comment x="0" y="0" w="320.6666666666667" collapsed="false">Applies the function to each &quot;atom&quot; of the data.  What&apos;s an atom?&#xD;Something for which the predicate input reports true.</comment><header></header><code></code><translations></translations><inputs><input type="%repRing"></input><input type="%predRing"></input><input type="%l"></input></inputs><script><block s="doIf"><custom-block s="truth %s"><block s="evaluate"><block var="atom?"/><list><block var="data"/></list></block></custom-block><script><block s="doReport"><block s="evaluate"><block var="function"/><list><block var="data"/></list></block></block></script></block><block s="doReport"><block s="reportMap"><block s="reifyReporter"><autolambda><custom-block s="deep map %repRing %predRing %l"><block var="function"/><block var="atom?"/><l/></custom-block></autolambda><list></list></block><block var="data"/></block></block></script></block-definition><block-definition s="nth item 1 %&apos;n&apos; %&apos;data&apos;" type="reporter" category="other"><header></header><code></code><translations></translations><inputs><input type="%n"></input><input type="%l"></input></inputs><script><block s="doIf"><block s="reportEquals"><block var="n"/><l>0</l></block><script><block s="doReport"><block var="data"/></block></script></block><block s="doReport"><custom-block s="nth item 1 %n %l"><block s="reportDifference"><block var="n"/><l>1</l></block><block s="reportListItem"><l>1</l><block var="data"/></block></custom-block></block></script></block-definition><block-definition s="Clear Plot" type="command" category="looks"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doDeclareVariables"><list><l>message</l></list></block><block s="doSetVar"><l>message</l><block s="reportJoinWords"><list><l>clearScope()</l></list></block></block><custom-block s="SendMessageToSoundScope %s"><block var="message"/></custom-block></script></block-definition><block-definition s="Copy Scope (Scope Capture variable)" type="command" category="looks"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doDeclareVariables"><list><l>message</l></list></block><block s="doSetVar"><l>message</l><block s="reportJoinWords"><list><l>copyScopeToSnap</l></list></block></block><custom-block s="SendMessageToSoundScope %s"><block var="message"/></custom-block></script></block-definition><block-definition s="Start Snap! Recording" type="command" category="sensing"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doDeclareVariables"><list><l>message</l></list></block><block s="doSetVar"><l>message</l><block s="reportJoinWords"><list><l>startSnapRecording()</l></list></block></block><custom-block s="SendMessageToSoundScope %s"><block var="message"/></custom-block></script></block-definition><block-definition s="Save Snap! Recording" type="command" category="sensing"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doDeclareVariables"><list><l>message</l></list></block><block s="doSetVar"><l>message</l><block s="reportJoinWords"><list><l>saveSnapRecording()</l></list></block></block><custom-block s="SendMessageToSoundScope %s"><block var="message"/></custom-block></script></block-definition><block-definition s="RunPlaybackScript %&apos;script&apos;" type="command" category="control"><comment x="0" y="0" w="382" collapsed="false">This block allows for the generation and manipulation of Snap! blocks using syntax that is similar to that of the Logo programming language.&#xD;&#xD;Each line of a valid script is interpreted as an individual command. There are two types of commands:&#xD;1) Generation&#xD;2) Manipulation&#xD;&#xD;The basic format of a Generation command is:&#xD;x = BlockName [arg1 arg2]&#xD;&#xD;where:&#xD;- &quot;x&quot; is a variable name. Variables are stored in the global scope by default and saved between both individual commands and different calls of this block within the current Snap! project.&#xD;- &quot;BlockName&quot; is the name of the block to generate. This can be either a shortened version of a block name, such as, &quot;Move&quot; or the exact, &quot;spec&quot; of a block, such as, &quot;Play %txt For %txt Note Length and Wait&quot;&#xD;- &quot;arg1&quot; and &quot;arg2&quot; refer to the arguments that should be passed into the newly-generated block.&#xD;&#xD;The basic format of a Manipulation command is:&#xD;Manipulate [x arg1 arg2]&#xD;&#xD;where:&#xD;- &quot;x&quot; is a variable name referring to a previously-generated block.&#xD;- &quot;Manipulate&quot; is one of the following commands:&#xD;   - SetInput - sets the input of the specified block to the subsequent arguments (specified by arg1, arg2, etc.)&#xD;   - Snap - snaps the specified block to the block represented by, &quot;arg1&quot; (interpreted as a variable name) such that the block referred to by x is above the block referred to by arg1&#xD;   - Insert - inserts the specified block into the block represented by, &quot;arg1&quot; (interpreted as a variable name) such that the block referred to by x is inside of the C-shaped block referred to by arg1&#xD;   - Delete - deletes the specified block&#xD;   - Exec - executes the specified block (and any blocks snapped to it)&#xD;   - ResetBounds - causes RunPlaybackScript to begin generating blocks from the initial block generation position (top-left of the Snap! script area)</comment><header></header><code></code><translations></translations><inputs><input type="%mlt"></input></inputs><script><block s="doDeclareVariables"><list><l>message</l></list></block><block s="doSetVar"><l>message</l><block s="reportJoinWords"><list><l>runPlaybackScript(</l><block var="script"/><l>)</l></list></block></block><custom-block s="SendMessageToSoundScope %s"><block var="message"/></custom-block></script></block-definition><block-definition s="Get Hint" type="command" category="control"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doDeclareVariables"><list><l>message</l></list></block><block s="doSetVar"><l>message</l><block s="reportJoinWords"><list><l>getHint()</l></list></block></block><custom-block s="SendMessageToSoundScope %s"><block var="message"/></custom-block></script></block-definition><block-definition s="Fast Fourier Transform %&apos;input list&apos;" type="command" category="looks"><header></header><code></code><translations></translations><inputs><input type="%s"></input></inputs><script><block s="doDeclareVariables"><list><l>message</l></list></block><block s="doSetVar"><l>message</l><block s="reportJoinWords"><list><l>fastFourierTransform(</l><block var="input list"/><l>)</l></list></block></block><custom-block s="SendMessageToSoundScope %s"><block var="message"/></custom-block></script></block-definition><block-definition s="Resume Playback" type="command" category="control"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doDeclareVariables"><list><l>message</l></list></block><block s="doSetVar"><l>message</l><block s="reportJoinWords"><list><l>resumePlaybackScript()</l></list></block></block><custom-block s="SendMessageToSoundScope %s"><block var="message"/></custom-block></script></block-definition><block-definition s="Pause Playback" type="command" category="control"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doDeclareVariables"><list><l>message</l></list></block><block s="doSetVar"><l>message</l><block s="reportJoinWords"><list><l>pausePlaybackScript()</l></list></block></block><custom-block s="SendMessageToSoundScope %s"><block var="message"/></custom-block></script></block-definition><block-definition s="Stop Playback" type="command" category="control"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doDeclareVariables"><list><l>message</l></list></block><block s="doSetVar"><l>message</l><block s="reportJoinWords"><list><l>stopPlaybackScript()</l></list></block></block><custom-block s="SendMessageToSoundScope %s"><block var="message"/></custom-block></script></block-definition><block-definition s="Project URL" type="reporter" category="variables"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doReport"><block s="reportJoinWords"><list><l>http://tunescope.org/index.html#project:</l><block s="evaluate"><block s="reportJSFunction"><list><l></l></list><l>const ide = window.parent.currentSnapiFrame.snapIde;&#xD;const username = ide.cloud.username;&#xD;const projectName = ide.projectName; &#xD;return `Username=${encodeURIComponent(username)}&amp;ProjectName=${encodeURIComponent(projectName)}`</l></block><list></list></block><l>&amp;editMode</l></list></block></block></script></block-definition><block-definition s="Play List %&apos;List&apos;" type="command" category="sound"><header></header><code></code><translations></translations><inputs><input type="%s"></input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>list</l></list><l>window.parent.playList &amp;&amp; window.parent.playList(list)</l></block><list><block var="List"/></list></block></script></block-definition><block-definition s="%&apos;Instrument&apos; Track %&apos;notes&apos; Notes %&apos;durations&apos; Durations" type="reporter" category="sound"><header></header><code></code><translations></translations><inputs><input type="%txt" readonly="true"><options>acoustic guitar&#xD;electric guitar&#xD;piano&#xD;organ&#xD;banjo&#xD;electric bass (finger)&#xD;ukulele&#xD;cabasa&#xD;snare&#xD;bass drum&#xD;closed hi-hat&#xD;open hi-hat&#xD;mid tom&#xD;high tom&#xD;crash cymbal&#xD;violin&#xD;cello</options></input><input type="%s"></input><input type="%s"></input></inputs><script><block s="doReport"><block s="reportNewList"><list><block var="notes"/><block var="durations"/><block var="Instrument"/><l>melody</l></list></block></block></script></block-definition><block-definition s="%&apos;Instrument&apos; Repeat Track until Done %&apos;chords&apos; Chords %&apos;durations&apos; Durations" type="reporter" category="sound"><header></header><code></code><translations></translations><inputs><input type="%s" readonly="true"><options>acoustic guitar&#xD;electric guitar&#xD;piano&#xD;organ&#xD;banjo&#xD;electric bass (finger)&#xD;ukulele&#xD;cabasa&#xD;snare&#xD;bass drum&#xD;closed hi-hat&#xD;open hi-hat&#xD;mid tom&#xD;high tom&#xD;crash cymbal&#xD;violin&#xD;cello</options></input><input type="%s"></input><input type="%s"></input></inputs><script><block s="doReport"><block s="reportNewList"><list><block var="chords"/><block var="durations"/><block var="Instrument"/><l>chord loop</l></list></block></block></script></block-definition><block-definition s="%&apos;Instrument&apos; Repeat %&apos;notes&apos; Drum Track until Done" type="reporter" category="sound"><header></header><code></code><translations></translations><inputs><input type="%s" readonly="true"><options>cabasa&#xD;snare&#xD;bass drum&#xD;closed hi-hat&#xD;open hi-hat&#xD;mid tom&#xD;high tom&#xD;crash cymbal&#xD;violin&#xD;cello</options></input><input type="%s"></input></inputs><script><block s="doDeclareVariables"><list><l>durations</l></list></block><block s="doSetVar"><l>durations</l><block s="reportNewList"><list></list></block></block><block s="doFor"><l>i</l><l>1</l><block s="reportListLength"><block var="notes"/></block><script><block s="doAddToList"><l>Eighth</l><block var="durations"/></block></script></block><block s="doReport"><block s="reportNewList"><list><block var="notes"/><block var="durations"/><block var="Instrument"/><l>drum loop</l></list></block></block></script></block-definition><block-definition s="%&apos;Measures&apos; Measures (Rest) + %&apos;Note List&apos; Notes + %&apos;Measures&apos; Measures (Rest)" type="reporter" category="sound"><header></header><code></code><translations></translations><inputs><input type="%s"></input><input type="%s"></input></inputs><script><block s="doReport"><l></l></block></script></block-definition><block-definition s="%&apos;Note List&apos; Notes + %&apos;Measures&apos; Measures (Rest)" type="reporter" category="sound"><header></header><code></code><translations></translations><inputs><input type="%s"></input><input type="%s"></input></inputs><script><block s="doReport"><l></l></block></script></block-definition><block-definition s="%&apos;Measures&apos; Measures (Rest) + %&apos;Note List&apos; Notes" type="reporter" category="sound"><header></header><code></code><translations></translations><inputs><input type="%s"></input><input type="%s"></input></inputs><script><block s="doReport"><l></l></block></script></block-definition><block-definition s="Rest for %&apos;Number&apos; Notes" type="reporter" category="variables"><header></header><code></code><translations></translations><inputs><input type="%s"></input></inputs><script><block s="doDeclareVariables"><list><l>List of Rests</l></list></block><block s="doSetVar"><l>List of Rests</l><block s="reportNewList"><list></list></block></block><block s="doFor"><l>i</l><l>1</l><block var="Number"/><script><block s="doSetVar"><l>List of Rests</l><block s="reportConcatenatedLists"><list><block var="List of Rests"/><block s="reportNewList"><list><l>R</l></list></block></list></block></block></script></block><block s="doReport"><block var="List of Rests"/></block></script></block-definition><block-definition s="Play %&apos;Notes&apos; Chord List" type="command" category="sound"><header></header><code></code><translations></translations><inputs><input type="%s"></input></inputs><script><block s="doFor"><l>i</l><l>1</l><block s="reportListLength"><block var="Notes"/></block><script><custom-block s="Play Chord %s for Duration %s"><block s="reportListItem"><block var="i"/><block var="Notes"/></block><l>Quarter</l></custom-block><custom-block s="Rest for %s Length of Time"><l>Quarter</l></custom-block></script></block></script></block-definition><block-definition s="%&apos;x&apos;" type="reporter" category="lists"><header></header><code></code><translations></translations><inputs><input type="%s"></input></inputs><script><block s="doReport"><block var="x"/></block></script></block-definition><block-definition s="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></translations><inputs><input type="%s"></input><input type="%l"></input></inputs><script><block s="doIf"><block s="reportEquals"><block var="a-list"/><block s="reportNewList"><list></list></block></block><script><block s="doReport"><block s="reportNewList"><list></list></block></block></script></block><block s="doIf"><block s="reportEquals"><block var="key"/><block s="reportListItem"><l>1</l><block s="reportListItem"><l>1</l><block var="a-list"/></block></block></block><script><block s="doReport"><block s="reportListItem"><l>1</l><block var="a-list"/></block></block></script></block><block s="doReport"><custom-block s="assoc %s %l"><block var="key"/><block s="reportCDR"><block var="a-list"/></block></custom-block></block></script></block-definition><block-definition s="%&apos;note duration&apos; Note Length" type="reporter" category="other"><header></header><code></code><translations></translations><inputs><input type="%txt"></input></inputs><script><block s="doReport"><block s="reportListItem"><l>2</l><custom-block s="assoc %s %l"><block var="note duration"/><custom-block s="Timing"></custom-block></custom-block></block></block></script></block-definition><block-definition s="Look Up %&apos;Key&apos; %&apos;List&apos;" type="reporter" category="lists"><header></header><code></code><translations></translations><inputs><input type="%s"></input><input type="%s"></input></inputs><script><block s="doReport"><block s="reportListItem"><l>2</l><custom-block s="assoc %s %l"><block var="Key"/><block var="List"/></custom-block></block></block></script></block-definition><block-definition s="Scope %&apos;newValue&apos;" type="command" category="looks"><header></header><code></code><translations></translations><inputs><input type="%b"></input></inputs><script><block s="doDeclareVariables"><list><l>message</l></list></block><block s="doSetVar"><l>message</l><block s="reportJoinWords"><list><l>setScopeVisibility(</l><block var="newValue"/><l>)</l></list></block></block><custom-block s="SendMessageToSoundScope %s"><block var="message"/></custom-block></script></block-definition><block-definition s="Freeze %&apos;bool&apos;" type="command" category="looks"><header></header><code></code><translations></translations><inputs><input type="%b"></input></inputs><script><block s="doDeclareVariables"><list><l>message</l></list></block><block s="doSetVar"><l>message</l><block s="reportJoinWords"><list><l>setFreeze(</l><block var="bool"/><l>)</l></list></block></block><custom-block s="SendMessageToSoundScope %s"><block var="message"/></custom-block></script></block-definition><block-definition s="Timing" type="reporter" category="other"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doReport"><block s="reportNewList"><list><block s="reportNewList"><list><l>Whole</l><l>4</l></list></block><block s="reportNewList"><list><l>Half</l><l>2</l></list></block><block s="reportNewList"><list><l>Quarter</l><l>1</l></list></block><block s="reportNewList"><list><l>Eighth</l><l>.5</l></list></block><block s="reportNewList"><list><l>Sixteenth</l><l>.25</l></list></block><block s="reportNewList"><list><l>Thirtysecond</l><l>.125</l></list></block><block s="reportNewList"><list><l>Dotted Whole</l><l>6</l></list></block><block s="reportNewList"><list><l>Dotted Half</l><l>3</l></list></block><block s="reportNewList"><list><l>Dotted Quarter</l><l>1.5</l></list></block><block s="reportNewList"><list><l>Dotted Eighth</l><l>.75</l></list></block><block s="reportNewList"><list><l>Dotted Sixteenth</l><l>.375</l></list></block><block s="reportNewList"><list><l>Dotted Thirtysecond</l><l>.187</l></list></block></list></block></block></script></block-definition><block-definition s="create %&apos;scope&apos; var %&apos;names&apos;" type="command" category="variables"><comment x="0" y="0" w="146" collapsed="false">This block creates  new variables on the selected scope: global (for all sprites), sprite (for this sprite only) or script (only for that blocks stack) with the names given (in &apos;names&apos; list).&#xD;&#xD;If there is already a variable with that name in that scope, it does nothing: no errors and no overwrites.</comment><header></header><code></code><translations>pt:cria as variáveis _ _&#xD;ca:crea les _ variables _&#xD;es:crear las _ variables _&#xD;de:erstellen _ var _&#xD;</translations><inputs><input type="%s" readonly="true">global<options>global&#xD;sprite&#xD;script</options></input><input type="%mult%txt"></input></inputs><script><block s="doIfElse"><block s="reportEquals"><block var="scope"/><l>script</l></block><script><block s="doForEach"><l>each item</l><block var="names"/><script><block s="doRun"><block s="reportJSFunction"><list><l>varName</l><l>proc</l></list><l>if ((typeof varName) != "string" || varName === "") {&#xD;    throw new Error("name isn&apos;t a string: " + varName);&#xD;}&#xD;if (!proc.homeContext.variables.vars[varName]) proc.homeContext.variables.addVar(varName);</l></block><list><block var="each item"/></list></block></script></block></script><script><block s="doDeclareVariables"><list><l>global</l></list></block><block s="doIfElse"><block s="reportEquals"><block var="scope"/><l>sprite</l></block><script><block s="doSetVar"><l>global</l><block s="reportBoolean"><l><bool>false</bool></l></block></block></script><script><block s="doSetVar"><l>global</l><block s="reportBoolean"><l><bool>true</bool></l></block></block></script></block><block s="doForEach"><l>each item</l><block var="names"/><script><block s="doRun"><block s="reportJSFunction"><list><l>varName</l><l>global</l><l>proc</l></list><l>if ((typeof varName) != "string" || varName === "") {&#xD;    throw new Error("name isn&apos;t a string: " + varName);&#xD;}&#xD;if (global &amp;&amp; !proc.homeContext.variables.parentFrame.parentFrame.vars[varName]) this.addVariable(varName, true);&#xD;if (!global &amp;&amp; !proc.homeContext.variables.parentFrame.vars[varName]) this.addVariable(varName, false);</l></block><list><block var="each item"/><block var="global"/></list></block></script></block><block s="doRun"><block s="reportJSFunction"><list></list><l>var ide = this.parentThatIsA(IDE_Morph);&#xD;ide.flushBlocksCache(&apos;variables&apos;); // b/c of inheritance&#xD;ide.refreshPalette();</l></block><list></list></block></script></block></script></block-definition><block-definition s="delete var %&apos;names&apos;" type="command" category="variables"><comment x="0" y="0" w="216.99999999999997" collapsed="false">This block deletes all the variables with the names given (inside input list).&#xD;&#xD;Each name will make only one variable deletion, and this will be the variable found following the scope order: &apos;script&apos; -&gt; &apos;sprite&apos; -&gt; &apos;global&apos;.&#xD;&#xD;If we have a &quot;testing&quot; sprite variable and also a &quot;testing&quot; global one, deleting &quot;testing&quot; will delete only the sprite one (Yes! we can also do &quot;delete var (testing, testing)&quot; to delete both.&#xD;&#xD;If one variable does not exists (in any scope) an error happens, stopping block action in that point. You can check it before with the &quot;does var (name) exists?&quot;block. </comment><header></header><code></code><translations>pt:remove as variáveis _&#xD;ca:esborra les variables _&#xD;es:borrar variables _&#xD;de:löschen var _&#xD;</translations><inputs><input type="%mult%txt"></input></inputs><script><block s="doForEach"><l>each item</l><block var="names"/><script><block s="doRun"><block s="reportJSFunction"><list><l>varName</l><l>proc</l></list><l>if ((typeof varName) != "string" || varName === "") {&#xD;    throw new Error("name isn&apos;t a string: " + varName);&#xD;}&#xD;if (typeof proc.homeContext.variables.vars[varName] !== &apos;undefined&apos;) {&#xD;    delete proc.homeContext.variables.vars[varName];&#xD;} else if (this.deletableVariableNames().indexOf(varName) != -1) {&#xD;    this.deleteVariable(varName);&#xD;} else {&#xD;    throw new Error("variable doesn&apos;t exist: " + varName);&#xD;}</l></block><list><block var="each item"/></list></block></script></block><block s="doRun"><block s="reportJSFunction"><list></list><l>var ide = this.parentThatIsA(IDE_Morph);&#xD;ide.flushBlocksCache(&apos;variables&apos;); // b/c of inheritance&#xD;ide.refreshPalette();</l></block><list></list></block></script></block-definition><block-definition s="set var %&apos;name&apos; to %&apos;value&apos;" type="command" category="variables"><comment x="0" y="0" w="240.49316406249994" collapsed="false">This block sets the given value (last input) to the variable named with the name givent (var input).&#xD;&#xD;It looks for that variable following the scope order &apos;script&apos; -&gt; &apos;sprite&apos; -&gt; &apos;global&apos; (the first match it finds).&#xD;&#xD;If that variable does not exist (in any scope) an error happens, stopping their script. You can check it before using the &quot;does var (name) exists?&quot; block. </comment><header></header><code></code><translations>ca:assigna a _ el valor _&#xD;es:asignar a _ el valor _&#xD;pt:altera _ para _&#xD;de:setze var _ auf _&#xD;</translations><inputs><input type="%s"><options>§_getVarNamesDict</options></input><input type="%s"></input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>varName</l><l>value</l><l>proc</l></list><l>if ((typeof varName) != "string") {&#xD;    throw new Error("name isn&apos;t a string: " + varName);&#xD;}&#xD;proc.homeContext.variables.setVar(varName, value);</l></block><list><block var="name"/><block var="value"/></list></block></script></block-definition><block-definition s="var %&apos;name&apos;" type="reporter" category="variables"><comment x="0" y="0" w="178.00000000000003" collapsed="false">This block reports the value of the variable with the name given.&#xD;&#xD;It looks for that variable following the scope order &apos;script&apos; -&gt; &apos;sprite&apos; -&gt; &apos;global&apos; (the first match it finds).&#xD;&#xD;If that variable does not exist (in any scope) an error happens, stopping their script. You can check it before using the &quot;does var (name) exists?&quot; block. </comment><header></header><code></code><translations>pt:o valor de _&#xD;</translations><inputs><input type="%s"><options>§_getVarNamesDict</options></input></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>varName</l><l>proc</l></list><l>if ((typeof varName) != "string") {&#xD;    throw new Error("name isn&apos;t a string: " + varName);&#xD;}&#xD;return proc.homeContext.variables.getVar(varName);</l></block><list><block var="name"/></list></block></block></script></block-definition><block-definition s="does var %&apos;name&apos; exist?" type="predicate" category="variables"><comment x="0" y="0" w="146" collapsed="false">This block reports &quot;true&quot; if there is a variable with this given name (input slot) in that context.&#xD;&#xD;It can be a global, sprite or script variable.&#xD;&#xD;Otherwise it reports &quot;false&quot;.</comment><header></header><code></code><translations>pt:a variável _ existe&#xD;ca:existeix la variable _ ?&#xD;es:existe la variable _ ?&#xD;de:existiert var _ ?&#xD;</translations><inputs><input type="%s"></input></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>varName</l><l>proc</l></list><l>if ((typeof varName) != "string" || varName === "") {&#xD;    throw new Error("name isn&apos;t a string: " + varName);&#xD;}&#xD;return proc.homeContext.variables.silentFind(varName)? true:false;</l></block><list><block var="name"/></list></block></block></script></block-definition><block-definition s="show var %&apos;name&apos;" type="command" category="variables"><comment x="0" y="0" w="181" collapsed="false">This block turns on (show) the watcher view on stage (if it was not already activated) of the variable with the given name (slot input).&#xD;&#xD;It can only access to the closest variable scope (if there different variables with the same name in different scopes) following the order &apos;script&apos; -&gt; &apos;sprite&apos; -&gt; &apos;global&apos;.&#xD;&#xD;No errors if that variable does not exist.</comment><header></header><code></code><translations>ca:mostra la variable _&#xD;es:mostrar variable _&#xD;pt:mostra a variável _&#xD;de:zeige var _&#xD;</translations><inputs><input type="%s"><options>§_getVarNamesDict</options></input></inputs><script><block s="doIf"><custom-block s="does var %s exist?"><block var="name"/></custom-block><script><block s="doRun"><block s="reportJSFunction"><list><l>varName</l><l>proc</l></list><l>    var varFrame = proc.homeContext.variables,&#xD;        stage,&#xD;        watcher,&#xD;        target,&#xD;        label,&#xD;        others,&#xD;        isGlobal,&#xD;        name = varName;&#xD;&#xD;    if (name instanceof Context) {&#xD;        if (name.expression.selector === &apos;reportGetVar&apos;) {&#xD;            name = name.expression.blockSpec;&#xD;        } else {&#xD;            proc.doChangePrimitiveVisibility(name.expression, false);&#xD;            return;&#xD;        }&#xD;    }&#xD;    if (proc.homeContext.receiver) {&#xD;        stage = proc.homeContext.receiver.parentThatIsA(StageMorph);&#xD;        if (stage) {&#xD;            target = varFrame.silentFind(name);&#xD;            if (!target) {return; }&#xD;            // first try to find an existing (hidden) watcher&#xD;            watcher = detect(&#xD;                stage.children,&#xD;                morph =&gt; morph instanceof WatcherMorph &amp;&amp;&#xD;                    morph.target === target &amp;&amp;&#xD;                        morph.getter === name&#xD;            );&#xD;            if (watcher !== null) {&#xD;                watcher.show();&#xD;                watcher.fixLayout(); // re-hide hidden parts&#xD;                return;&#xD;            }&#xD;            // if no watcher exists, create a new one&#xD;            isGlobal = contains(&#xD;                proc.homeContext.receiver.globalVariables().names(),&#xD;                varName&#xD;            );&#xD;            if (isGlobal || target.owner) {&#xD;                label = name;&#xD;            } else {&#xD;                label = name + &apos; &apos; + localize(&apos;(temporary)&apos;);&#xD;            }&#xD;            watcher = new WatcherMorph(&#xD;                label,&#xD;                SpriteMorph.prototype.blockColor.variables,&#xD;                target,&#xD;                name&#xD;            );&#xD;            watcher.setPosition(stage.position().add(10));&#xD;            others = stage.watchers(watcher.left());&#xD;            if (others.length &gt; 0) {&#xD;                watcher.setTop(others[others.length - 1].bottom());&#xD;            }&#xD;            stage.add(watcher);&#xD;            watcher.fixLayout();&#xD;        }&#xD;    }</l></block><list><block var="name"/></list></block></script></block></script></block-definition><block-definition s="hide var %&apos;name&apos;" type="command" category="variables"><comment x="0" y="0" w="181" collapsed="false">This block turns off (hide) the watcher view on stage (if it was not already activated) of the variable with the given name (slot input).&#xD;&#xD;It can only access to the closest variable scope (if there different variables with the same name in different scopes) following the order &apos;script&apos; -&gt; &apos;sprite&apos; -&gt; &apos;global&apos;.&#xD;&#xD;No errors if that variable does not exist.</comment><header></header><code></code><translations>ca:amaga la variable _&#xD;es:esconder variable _&#xD;pt:esconde a variável _&#xD;de:verstecke var _&#xD;</translations><inputs><input type="%s"><options>§_getVarNamesDict</options></input></inputs><script><block s="doIf"><custom-block s="does var %s exist?"><block var="name"/></custom-block><script><block s="doRun"><block s="reportJSFunction"><list><l>varName</l><l>proc</l></list><l>    // to delete all temporary watchers, use the primitive "hide" with no inputs&#xD;    var varFrame = proc.homeContext.variables,&#xD;        stage,&#xD;        watcher,&#xD;        target,&#xD;        name = varName;&#xD;&#xD;    if (name instanceof Context) {&#xD;        if (name.expression.selector === &apos;reportGetVar&apos;) {&#xD;            name = name.expression.blockSpec;&#xD;        } else {&#xD;            proc.doChangePrimitiveVisibility(name.expression, true);&#xD;            return;&#xD;        }&#xD;    }&#xD;    if (!name) {&#xD;        proc.doRemoveTemporaries();&#xD;        return;&#xD;    }&#xD;    if (proc.homeContext.receiver) {&#xD;        stage = proc.homeContext.receiver.parentThatIsA(StageMorph);&#xD;        if (stage) {&#xD;            target = varFrame.find(name);&#xD;            watcher = detect(&#xD;                stage.children,&#xD;                morph =&gt; morph instanceof WatcherMorph &amp;&amp;&#xD;                    morph.target === target &amp;&amp;&#xD;                        morph.getter === name&#xD;            );&#xD;            if (watcher !== null) {&#xD;                if (watcher.isTemporary()) {&#xD;                    watcher.destroy();&#xD;                } else {&#xD;                    watcher.hide();&#xD;                }&#xD;            }&#xD;        }&#xD;    }&#xD;</l></block><list><block var="name"/></list></block></script></block></script></block-definition><block-definition s="SendMessageToSoundScope %&apos;message&apos;" type="command" category="other"><header></header><code></code><translations></translations><inputs><input type="%s"></input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>message</l></list><l>window.parent.postMessage(message, "*");</l></block><list><block var="message"/></list></block><block s="doBroadcast"><block var="message"/></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="sound named %&apos;name&apos;" type="reporter" category="sensing"><header></header><code></code><translations>pt:o som _&#xD;</translations><inputs><input type="%s"><options>§_soundsMenu</options></input></inputs><script><block s="doReport"><block s="reportFindFirst"><block s="reifyPredicate"><autolambda><block s="reportEquals"><block s="reportGetSoundAttribute"><l><option>name</option></l><l></l></block><block var="name"/></block></autolambda><list></list></block><block s="reportGet"><l><option>sounds</option></l></block></block></block></script></block-definition><block-definition s="$circleSolid-1-255-0-0 record" type="reporter" category="sensing"><comment x="0" y="0" w="191.99999999999997" 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;</translations><inputs></inputs><script><block s="doDeclareVariables"><list><l>test</l><l>pic</l></list></block><block s="doSetVar"><l>test</l><block s="evaluate"><block s="reportJSFunction"><list></list><l>var soundRecorder,&#xD;    result = false;&#xD;&#xD;soundRecorder = new SoundRecorderDialogMorph(&#xD;    function (audio) {&#xD;        if (audio) {&#xD;            result = new Sound(audio, &apos;recording&apos;);&#xD;        } else {&#xD;            result = null;&#xD;            this.destroy();&#xD;        }&#xD;    }&#xD;);&#xD;&#xD;soundRecorder.cancel = function () {&#xD;    result = null;&#xD;    this.destroy();&#xD;};&#xD;&#xD;soundRecorder.key = &apos;microphone&apos;;&#xD;soundRecorder.popUp(this.world());&#xD;return function () {return result; };</l></block><list></list></block></block><block s="doWaitUntil"><block s="evaluate"><block s="reifyScript"><script><block s="doSetVar"><l>pic</l><block s="evaluate"><block var="test"/><list></list></block></block><block s="doReport"><block s="reportNot"><block s="reportEquals"><block var="pic"/><block s="reportBoolean"><l><bool>false</bool></l></block></block></block></block></script><list></list></block><list></list></block></block><block s="doReport"><block var="pic"/></block></script></block-definition><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;</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="reportOr"><block s="reportIsA"><block var="name"/><l><option>list</option></l></block><block s="reportIsA"><block var="name"/><l><option>sound</option></l></block></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="reportProduct"><block s="reportAttributeOf"><l><option>width</option></l><block s="reportGet"><l><option>stage</option></l></block></block><l>2</l></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="reportListLength"><block s="reportListItem"><l>1</l><block var="samples"/></block></block><block s="reportProduct"><block s="reportAttributeOf"><l><option>width</option></l><block s="reportGet"><l><option>stage</option></l></block></block><l>2</l></block></block></block><block s="doSetVar"><l>offset</l><block s="reportQuotient"><block s="reportAttributeOf"><l><option>height</option></l><l>Stage</l></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><l>Stage</l></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="reportProduct"><block s="reportAttributeOf"><l><option>width</option></l><block s="reportGet"><l><option>stage</option></l></block></block><l>2</l></block><script><block s="doChangeVar"><l>i</l><block var="step"/></block><block s="gotoXY"><block s="reportSum"><block s="xPosition"></block><l>0.5</l></block><block s="reportSum"><block s="reportProduct"><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></block><block var="offset"/></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><l>Stage</l></block><l>-2</l></block></block></script></block></script><script><block s="doSetVar"><l>step</l><block s="reportQuotient"><block s="reportListLength"><block var="samples"/></block><block s="reportProduct"><block s="reportAttributeOf"><l><option>width</option></l><block s="reportGet"><l><option>stage</option></l></block></block><l>2</l></block></block></block><block s="gotoXY"><block s="reportQuotient"><block s="reportAttributeOf"><l><option>width</option></l><l>Stage</l></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="reportProduct"><block s="reportAttributeOf"><l><option>width</option></l><l>Stage</l></block><l>2</l></block><script><block s="doChangeVar"><l>i</l><block var="step"/></block><block s="gotoXY"><block s="reportSum"><block s="xPosition"></block><l>0.5</l></block><block s="reportProduct"><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></block></block></script></block></script></custom-block><block s="up"></block></script></block></script></block-definition><block-definition s="error %&apos;msg&apos;" type="command" category="other"><header></header><code></code><translations>pt:lança o erro _&#xD;</translations><inputs><input type="%txt"></input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>msg</l></list><l>throw new Error(msg);</l></block><list><block var="msg"/></list></block></script></block-definition><block-definition s="Play Tracks %&apos;tracks&apos; Time Signature: %&apos;timeSignature&apos;" type="command" category="control"><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><block s="doRun"><block s="reportJSFunction"><list><l>tracks,timeSignature,tempo</l></list><l>window.parent.playTracks &amp;&amp; window.parent.playTracks(tracks, timeSignature, tempo)</l></block><list><block var="tracks"/><block var="timeSignature"/><block s="getTempo"></block></list></block></script></block-definition><block-definition s="Position of Notes in Major Scale" type="reporter" category="other"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doReport"><block s="reportNewList"><list><l>1</l><l>3</l><l>5</l><l>6</l><l>8</l><l>10</l><l>12</l></list></block></block></script></block-definition><block-definition s="%&apos;Note&apos; Major Chord %&apos;Octave&apos; Octave (Dependency)" type="reporter" category="other"><comment x="0" y="0" w="90" collapsed="false">Reports the notes of a major 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="reportNewList"><list><block s="reportListItem"><l>1</l><custom-block s="%s Major Scale %s Octave"><block var="Note"/><block var="Octave"/></custom-block></block><block s="reportListItem"><l>3</l><custom-block s="%s Major Scale %s Octave"><block var="Note"/><block var="Octave"/></custom-block></block><block s="reportListItem"><l>5</l><custom-block s="%s Major Scale %s Octave"><block var="Note"/><block var="Octave"/></custom-block></block></list></block></block></script></block-definition><block-definition s="Position of Notes in Minor Scale" type="reporter" category="other"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doReport"><block s="reportNewList"><list><l>1</l><l>3</l><l>4</l><l>6</l><l>8</l><l>9</l><l>11</l></list></block></block></script></block-definition><block-definition s="%&apos;Note&apos; Minor Chord %&apos;Octave&apos; Octave (Dependency)" type="reporter" category="other"><comment x="0" y="0" w="90" collapsed="false">Reports the notes of a minor 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="reportNewList"><list><block s="reportListItem"><l>1</l><custom-block s="%s Minor Scale %s Octave"><block var="Note"/><block var="Octave"/></custom-block></block><block s="reportListItem"><l>3</l><custom-block s="%s Minor Scale %s Octave"><block var="Note"/><block var="Octave"/></custom-block></block><block s="reportListItem"><l>5</l><custom-block s="%s Minor Scale %s Octave"><block var="Note"/><block var="Octave"/></custom-block></block></list></block></block></script></block-definition><block-definition s="%&apos;Note&apos; Major/Major %&apos;Octave&apos; Octave %&apos;Position&apos; Chord Position" type="reporter" category="other"><header></header><code></code><translations></translations><inputs><input type="%s"></input><input type="%s"></input><input type="%s"></input></inputs><script><block s="doReport"><custom-block s="%s Major Chord %s Octave (Dependency)"><block s="reportListItem"><block var="Position"/><custom-block s="%s Major Scale"><block var="Note"/></custom-block></block><block var="Octave"/></custom-block><comment w="235.83333333333334" collapsed="false">Given a starting scale and octave, this block will find the corresponding chord for each note in that scale.</comment></block></script></block-definition><block-definition s="%&apos;Note&apos; Major/Minor %&apos;Octave&apos; Octave %&apos;Position&apos; Chord Position" type="reporter" category="other"><header></header><code></code><translations></translations><inputs><input type="%s"></input><input type="%s"></input><input type="%s"></input></inputs><script><block s="doReport"><custom-block s="%s Minor Chord %s Octave (Dependency)"><block s="reportListItem"><block var="Position"/><custom-block s="%s Major Scale"><block var="Note"/></custom-block></block><block var="Octave"/></custom-block><comment w="107.5" collapsed="false">Given a starting scale and octave, this block will find the corresponding chord for each note in that scale.</comment></block></script></block-definition><block-definition s="Notes of %&apos;Scale&apos; before %&apos;Note&apos;" type="reporter" category="other"><header></header><code></code><translations></translations><inputs><input type="%s"></input><input type="%s"></input></inputs><script><block s="doDeclareVariables"><list><l>Subscale</l></list></block><block s="doSetVar"><l>Subscale</l><block s="reportNewList"><list></list></block></block><block s="doFor"><l>i</l><l>1</l><block s="reportListLength"><block var="Scale"/></block><script><block s="doIfElse"><block s="reportNot"><block s="reportEquals"><block s="reportListItem"><block var="i"/><block var="Scale"/></block><block var="Note"/></block></block><script><block s="doAddToList"><block s="reportListItem"><block var="i"/><block var="Scale"/></block><block var="Subscale"/></block></script><script><block s="doReport"><block var="Subscale"/></block></script></block></script></block></script></block-definition><block-definition s="Notes of %&apos;Scale&apos; after %&apos;Note&apos;" type="reporter" category="other"><header></header><code></code><translations></translations><inputs><input type="%s"></input><input type="%s"></input></inputs><script><block s="doDeclareVariables"><list><l>Subscale</l></list></block><block s="doSetVar"><l>Subscale</l><block s="reportNewList"><list></list></block></block><block s="doFor"><l>i</l><block s="reportListLength"><block var="Scale"/></block><l>1</l><script><block s="doIfElse"><block s="reportNot"><block s="reportEquals"><block s="reportListItem"><block var="i"/><block var="Scale"/></block><block var="Note"/></block></block><script><block s="doInsertInList"><block s="reportListItem"><block var="i"/><block var="Scale"/></block><l>1</l><block var="Subscale"/></block></script><script><block s="doReport"><block var="Subscale"/></block></script></block></script></block></script></block-definition><block-definition s="%&apos;Note&apos; Diminished Scale" type="reporter" category="other"><header></header><code></code><translations></translations><inputs><input type="%s"></input></inputs><script><block s="doDeclareVariables"><list><l>Scale</l><l>Subscale</l></list></block><block s="doSetVar"><l>Subscale</l><block s="reportNewList"><list></list></block></block><block s="doSetVar"><l>Scale</l><block s="reportConcatenatedLists"><list><block s="reportNewList"><list><block var="Note"/></list></block><custom-block s="Notes of %s after %s"><custom-block s="Chromatic Scale"></custom-block><block var="Note"/></custom-block><custom-block s="Notes of %s before %s"><custom-block s="Chromatic Scale"></custom-block><block var="Note"/></custom-block></list></block><comment w="139.16666666666669" collapsed="false">Arranges the Chromatic scale to begin with the input note.</comment></block><block s="doFor"><l>i</l><l>1</l><l>8</l><script><block s="doAddToList"><block s="reportListItem"><block s="reportListItem"><block var="i"/><custom-block s="Position of Notes in Diminished Scale"></custom-block></block><block var="Scale"/></block><block var="Subscale"/></block></script><comment w="90" collapsed="false">Selects the notes of the Diminished scale from the Chromatic scale.</comment></block><block s="doReport"><block var="Subscale"/></block></script><scripts><comment x="248.79622395833348" y="10" w="268.33333333333337" collapsed="false">Reports all notes in a given diminished scale in order, beginning with the input note. Does not include octave.</comment></scripts></block-definition><block-definition s="Position of Notes in Diminished Scale" type="reporter" category="other"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doReport"><block s="reportNewList"><list><l>1</l><l>3</l><l>4</l><l>6</l><l>7</l><l>9</l><l>10</l><l>12</l></list></block></block></script></block-definition><block-definition s="%&apos;Note&apos; Diminished Chord %&apos;Octave&apos; Octave" type="reporter" category="other"><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="reportNewList"><list><block s="reportListItem"><l>1</l><custom-block s="%s Diminished Scale %s Octave"><block var="Note"/><block var="Octave"/></custom-block></block><block s="reportListItem"><l>3</l><custom-block s="%s Diminished Scale %s Octave"><block var="Note"/><block var="Octave"/></custom-block></block><block s="reportListItem"><l>5</l><custom-block s="%s Diminished Scale %s Octave"><block var="Note"/><block var="Octave"/></custom-block></block></list></block></block></script></block-definition><block-definition s="Major Scale - Major Chords" type="reporter" category="other"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doReport"><block s="reportNewList"><list><l>1</l><l>4</l><l>5</l></list></block></block></script></block-definition><block-definition s="Major Scale - Minor Chords" type="reporter" category="other"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doReport"><block s="reportNewList"><list><l>2</l><l>3</l><l>6</l></list></block></block></script></block-definition><block-definition s="Roman Numeral Conversion" type="reporter" category="other"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doReport"><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>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></list></block></block></script></block-definition><block-definition s="Converted %&apos;Roman Numeral&apos; Roman Numeral" type="reporter" category="other"><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="assoc %s %l"><block var="Roman Numeral"/><custom-block s="Roman Numeral Conversion"></custom-block></custom-block></block></block></script></block-definition><block-definition s="%&apos;Note&apos; Major Scale" type="reporter" category="other"><comment x="0" y="0" w="302.47753906249994" collapsed="false">Reports all notes in a given major scale in order, beginning with the input note. Does not include octave.</comment><header></header><code></code><translations></translations><inputs><input type="%s"></input></inputs><script><block s="doDeclareVariables"><list><l>Scale</l><l>Subscale</l></list></block><block s="doSetVar"><l>Subscale</l><block s="reportNewList"><list></list></block></block><block s="doSetVar"><l>Scale</l><block s="reportConcatenatedLists"><list><block s="reportNewList"><list><block var="Note"/></list></block><custom-block s="Notes of %s after %s"><custom-block s="Chromatic Scale"></custom-block><block var="Note"/></custom-block><custom-block s="Notes of %s before %s"><custom-block s="Chromatic Scale"></custom-block><block var="Note"/></custom-block></list></block><comment w="166.66666666666669" collapsed="false">Arranges the Chromatic scale to begin with the input note.</comment></block><block s="doFor"><l>i</l><l>1</l><l>7</l><script><block s="doAddToList"><block s="reportListItem"><block s="reportListItem"><block var="i"/><custom-block s="Position of Notes in Major Scale"></custom-block></block><block var="Scale"/></block><block var="Subscale"/><comment w="130.83333333333334" collapsed="false">Selects the notes of the Major scale from the Chromatic scale.</comment></block></script></block><block s="doReport"><block var="Subscale"/></block></script></block-definition><block-definition s="%&apos;Note&apos; Minor Scale" type="reporter" category="other"><comment x="0" y="0" w="348.72753906250006" collapsed="false">Reports all notes in a given minor scale in order, beginning with the input note. Does not include octave.</comment><header></header><code></code><translations></translations><inputs><input type="%s"></input></inputs><script><block s="doDeclareVariables"><list><l>Scale</l><l>Subscale</l></list></block><block s="doSetVar"><l>Subscale</l><block s="reportNewList"><list></list></block></block><block s="doSetVar"><l>Scale</l><block s="reportConcatenatedLists"><list><block s="reportNewList"><list><block var="Note"/></list></block><custom-block s="Notes of %s after %s"><custom-block s="Chromatic Scale"></custom-block><block var="Note"/></custom-block><custom-block s="Notes of %s before %s"><custom-block s="Chromatic Scale"></custom-block><block var="Note"/></custom-block></list></block><comment w="186.25" collapsed="false">Arranges the Chromatic scale to begin with the input note.</comment></block><block s="doFor"><l>i</l><l>1</l><l>7</l><script><block s="doAddToList"><block s="reportListItem"><block s="reportListItem"><block var="i"/><custom-block s="Position of Notes in Minor Scale"></custom-block></block><block var="Scale"/></block><block var="Subscale"/><comment w="90" collapsed="false">Selects the notes of the Minor scale from the Chromatic scale.</comment></block></script></block><block s="doReport"><block var="Subscale"/></block></script></block-definition><block-definition s="Minor Scale - Major Chords" type="reporter" category="other"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doReport"><block s="reportNewList"><list><l>3</l><l>6</l><l>7</l></list></block></block></script></block-definition><block-definition s="Minor Scale - Minor Chords" type="reporter" category="other"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doReport"><block s="reportNewList"><list><l>1</l><l>4</l><l>5</l></list></block></block></script></block-definition><block-definition s="%&apos;Note&apos; Diminished Scale %&apos;Octave&apos; Octave" type="reporter" category="other"><comment x="0" y="0" w="296.6563151041664" collapsed="false">Reports all notes in a given diminished scale in order, beginning with the input note and octave.</comment><header></header><code></code><translations></translations><inputs><input type="%s"></input><input type="%s"></input></inputs><script><block s="doDeclareVariables"><list><l>Scale</l><l>Subscale</l></list></block><block s="doSetVar"><l>Subscale</l><block s="reportNewList"><list></list></block></block><block s="doSetVar"><l>Scale</l><block s="reportConcatenatedLists"><list><block s="reportNewList"><list><block s="reportJoinWords"><list><block var="Note"/><block var="Octave"/></list></block></list></block><block s="reportMap"><block s="reifyReporter"><autolambda><block s="reportJoinWords"><list><l></l><block var="Octave"/></list></block></autolambda><list></list></block><custom-block s="Notes of %s after %s"><custom-block s="Chromatic Scale"></custom-block><block var="Note"/></custom-block></block><block s="reportMap"><block s="reifyReporter"><autolambda><block s="reportJoinWords"><list><l></l><block s="reportSum"><block var="Octave"/><l>1</l></block></list></block></autolambda><list></list></block><custom-block s="Notes of %s before %s"><custom-block s="Chromatic Scale"></custom-block><block var="Note"/></custom-block></block></list></block><comment w="90" collapsed="false">Arranges the Chromatic scale to begin with the input note and octave.</comment></block><block s="doFor"><l>i</l><l>1</l><l>8</l><script><block s="doAddToList"><block s="reportListItem"><block s="reportListItem"><block var="i"/><custom-block s="Position of Notes in Diminished Scale"></custom-block></block><block var="Scale"/></block><block var="Subscale"/><comment w="90" collapsed="false">Selects the notes of the Diminished scale from the Chromatic scale.</comment></block></script></block><block s="doReport"><block var="Subscale"/></block></script></block-definition><block-definition s="%&apos;Note&apos; Minor/Major %&apos;Octave&apos; Octave %&apos;Position&apos; Chord Position" type="reporter" category="other"><header></header><code></code><translations></translations><inputs><input type="%s"></input><input type="%s"></input><input type="%s"></input></inputs><script><block s="doReport"><custom-block s="%s Major Chord %s Octave (Dependency)"><block s="reportListItem"><block var="Position"/><custom-block s="%s Minor Scale"><block var="Note"/></custom-block></block><block var="Octave"/></custom-block><comment w="235.83333333333334" collapsed="false">Given a starting scale and octave, this block will find the corresponding chord for each note in that scale.</comment></block></script></block-definition><block-definition s="%&apos;Note&apos; Minor/Minor %&apos;Octave&apos; Octave %&apos;Position&apos; Chord Position" type="reporter" category="other"><header></header><code></code><translations></translations><inputs><input type="%s"></input><input type="%s"></input><input type="%s"></input></inputs><script><block s="doReport"><custom-block s="%s Minor Chord %s Octave (Dependency)"><block s="reportListItem"><block var="Position"/><custom-block s="%s Minor Scale"><block var="Note"/></custom-block></block><block var="Octave"/></custom-block><comment w="107.5" collapsed="false">Given a starting scale and octave, this block will find the corresponding chord for each note in that scale.</comment></block></script></block-definition><block-definition s="Set Instrument To %&apos;instrument name&apos;" type="command" category="sound"><comment x="0" y="0" w="90" collapsed="false">Sets the global instrument used for playing notes to the selected instrument.</comment><header></header><code></code><translations></translations><inputs><input type="%s" readonly="true"><options>piano&#xD;organ&#xD;acoustic guitar&#xD;electric guitar&#xD;electric bass (finger)&#xD;ukulele&#xD;banjo&#xD;violin&#xD;cello&#xD;bass drum&#xD;snare&#xD;mid tom&#xD;high tom&#xD;crash cymbal&#xD;closed hi-hat&#xD;open hi-hat&#xD;cabasa</options></input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>instrumentName</l></list><l>window.parent.changeInstrument &amp;&amp; window.parent.changeInstrument(instrumentName)</l></block><list><block var="instrument name"/></list></block><block s="doIfElse"><custom-block s="does var %s exist?"><l>currentInstrument</l></custom-block><script><block s="doWaitUntil"><block s="reportIsIdentical"><block var="currentInstrument"/><block var="instrument name"/></block></block></script><script><block s="doWait"><l>0.1</l></block></script></block></script></block-definition><block-definition s="Set Volume To %&apos;Percent&apos; %" type="command" category="sound"><comment x="0" y="0" w="402.99999999999994" collapsed="false">Sets the global volume percentage used when playing notes to the provided value. </comment><header></header><code></code><translations></translations><inputs><input type="%n">50</input></inputs><script><block s="doDeclareVariables"><list><l>message</l></list></block><block s="doSetVar"><l>message</l><block s="reportJoinWords"><list><l>setVolumePercent(</l><block var="Percent"/><l>)</l></list></block></block><custom-block s="SendMessageToSoundScope %s"><block var="message"/></custom-block></script></block-definition><block-definition s="Set Volume of Instrument %&apos;Instrument&apos; to %&apos;VolumePercent&apos; %" type="command" category="sound"><comment x="0" y="0" w="243.00000000000006" collapsed="false">Sets the default volume percentage of the selected instrument to the specified number.</comment><header></header><code></code><translations></translations><inputs><input type="%txt" readonly="true"><options>acoustic guitar&#xD;electric guitar&#xD;piano&#xD;organ&#xD;banjo&#xD;electric bass (finger)&#xD;ukulele&#xD;cabasa&#xD;snare&#xD;bass drum&#xD;closed hi-hat&#xD;open hi-hat&#xD;mid tom&#xD;high tom&#xD;crash cymbal</options></input><input type="%n">50</input></inputs><script><block s="doDeclareVariables"><list><l>message</l></list></block><block s="doSetVar"><l>message</l><block s="reportJoinWords"><list><l>setVolumeOfInstrument(</l><block var="Instrument"/><l>,</l><block var="VolumePercent"/><l>)</l></list></block></block><custom-block s="SendMessageToSoundScope %s"><block var="message"/></custom-block></script></block-definition><block-definition s="Play %&apos;Note&apos; for %&apos;Note Length&apos; Note Length" type="command" category="sound"><comment x="0" y="0" w="714" collapsed="false">Starts to play the selected note for the specified number of seconds. A full list of acceptable notes can be found by using the dropdown. This block does not wait for the selected note to finish playing.</comment><header></header><code></code><translations></translations><inputs><input type="%txt" readonly="true"><options>C2&#xD;C#2&#xD;D2&#xD;D#2&#xD;E2&#xD;F2&#xD;F#2&#xD;G2&#xD;G#2&#xD;A2&#xD;A#2&#xD;B2&#xD;C3&#xD;C#3&#xD;D3&#xD;D#3&#xD;E3&#xD;F3&#xD;F#3&#xD;G3&#xD;G#3&#xD;A3&#xD;A#3&#xD;B3&#xD;C4&#xD;C#4&#xD;D4&#xD;D#4&#xD;E4&#xD;F4&#xD;F#4&#xD;G4&#xD;G#4&#xD;A4&#xD;A#4&#xD;B4&#xD;C5&#xD;C#5&#xD;D5&#xD;D#5&#xD;E5&#xD;F5&#xD;F#5&#xD;G5&#xD;G#5&#xD;A5&#xD;A#5&#xD;B5</options></input><input type="%txt" readonly="true"><options>Whole&#xD;Half&#xD;Quarter&#xD;Eighth&#xD;Sixteenth&#xD;Thirtysecond&#xD;Dotted Half&#xD;Dotted Quarter&#xD;Dotted Eighth&#xD;Dotted Sixteenth&#xD;Dotted Thirtysecond</options></input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>note</l><l>noteLength</l></list><l>window.parent.playNote &amp;&amp; window.parent.playNote(note, noteLength)</l></block><list><block var="Note"/><custom-block s="%txt Note Length"><block var="Note Length"/></custom-block></list></block></script></block-definition><block-definition s="Play %&apos;Note&apos; For %&apos;Duration&apos; Note Length and Wait" type="command" category="sound"><comment x="0" y="0" w="638" collapsed="false">Plays the selected note for the specified number of seconds. A full list of acceptable notes can be found by using the dropdown. This block waits for the selected note to finish playing.</comment><header></header><code></code><translations></translations><inputs><input type="%txt" readonly="true"><options>C2&#xD;C#2&#xD;D2&#xD;D#2&#xD;E2&#xD;F2&#xD;F#2&#xD;G2&#xD;G#2&#xD;A2&#xD;A#2&#xD;B2&#xD;C3&#xD;C#3&#xD;D3&#xD;D#3&#xD;E3&#xD;F3&#xD;F#3&#xD;G3&#xD;G#3&#xD;A3&#xD;A#3&#xD;B3&#xD;C4&#xD;C#4&#xD;D4&#xD;D#4&#xD;E4&#xD;F4&#xD;F#4&#xD;G4&#xD;G#4&#xD;A4&#xD;A#4&#xD;B4&#xD;C5&#xD;C#5&#xD;D5&#xD;D#5&#xD;E5&#xD;F5&#xD;F#5&#xD;G5&#xD;G#5&#xD;A5&#xD;A#5&#xD;B5</options></input><input type="%txt" readonly="true"><options>Whole&#xD;Half&#xD;Quarter&#xD;Eighth&#xD;Sixteenth&#xD;Thirtysecond&#xD;Dotted Half&#xD;Dotted Quarter&#xD;Dotted Eighth&#xD;Dotted Sixteenth&#xD;Dotted Thirtysecond</options></input></inputs><script><custom-block s="Play %txt for %txt Note Length"><block var="Note"/><block var="Duration"/></custom-block><custom-block s="Rest for %s Length of Time"><block var="Duration"/></custom-block></script></block-definition><block-definition s="Rest for %&apos;Length&apos; Length of Time" type="command" category="sound"><header></header><code></code><translations></translations><inputs><input type="%s" readonly="true"><options>Whole&#xD;Half&#xD;Quarter&#xD;Eighth&#xD;Sixteenth&#xD;Thirtysecond&#xD;Dotted Half&#xD;Dotted Quarter&#xD;Dotted Eighth&#xD;Dotted Sixteenth&#xD;Dotted Thirtysecond</options></input></inputs><script><block s="doWait"><block s="reportProduct"><custom-block s="%txt Note Length"><block var="Length"/></custom-block><block s="reportQuotient"><l>60</l><block s="getTempo"></block></block></block></block></script></block-definition><block-definition s="Play Chord %&apos;Chord&apos; for Duration %&apos;Duration&apos;" type="command" category="sound"><header></header><code></code><translations></translations><inputs><input type="%s"></input><input type="%s" readonly="true"><options>Whole&#xD;Half&#xD;Quarter&#xD;Eighth&#xD;Sixteenth&#xD;Thirtysecond&#xD;Dotted Half&#xD;Dotted Quarter&#xD;Dotted Eighth&#xD;Dotted Sixteenth&#xD;Dotted Thirtysecond</options></input></inputs><script><block s="doFor"><l>i</l><l>1</l><block s="reportListLength"><block var="Chord"/></block><script><custom-block s="Play %txt for %txt Note Length"><block s="reportListItem"><block var="i"/><block var="Chord"/></block><block var="Duration"/></custom-block></script></block><custom-block s="Rest for %s Length of Time"><block var="Duration"/></custom-block></script></block-definition><block-definition s="Chromatic Scale" type="reporter" category="sound"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doReport"><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></script></block-definition><block-definition s="Chromatic Scale Beginning with %&apos;Note&apos; (Initial Note)" type="reporter" category="other"><header></header><code></code><translations></translations><inputs><input type="%s"></input></inputs><script><block s="doDeclareVariables"><list><l>Scale</l></list></block><block s="doSetVar"><l>Scale</l><block s="reportNewList"><list></list></block></block><block s="doFor"><l>i</l><custom-block s="Position of %s Note in the Chromatic Scale"><block var="Note"/></custom-block><l>12</l><script><block s="doAddToList"><block s="reportListItem"><block var="i"/><custom-block s="Chromatic Scale"></custom-block></block><block var="Scale"/></block></script></block><block s="doFor"><l>i</l><l>1</l><block s="reportDifference"><custom-block s="Position of %s Note in the Chromatic Scale"><block var="Note"/></custom-block><l>1</l></block><script><block s="doAddToList"><block s="reportListItem"><block var="i"/><custom-block s="Chromatic Scale"></custom-block></block><block var="Scale"/></block></script></block><block s="doIf"><block s="reportEquals"><block var="Note"/><l>C</l></block><script><block s="doRepeat"><l>2</l><script><block s="doDeleteFromList"><l><option>last</option></l><block var="Scale"/></block></script></block></script></block><block s="doReport"><block var="Scale"/></block></script></block-definition><block-definition s="Position of %&apos;Note&apos; Note in the Chromatic Scale" type="reporter" category="other"><header></header><code></code><translations></translations><inputs><input type="%s"></input></inputs><script><block s="doFor"><l>i</l><l>1</l><l>12</l><script><block s="doIf"><block s="reportEquals"><block var="Note"/><block s="reportListItem"><block var="i"/><custom-block s="Chromatic Scale"></custom-block></block></block><script><block s="doReport"><block var="i"/></block></script></block></script></block></script></block-definition><block-definition s="%&apos;Note&apos; Major Scale %&apos;Octave&apos; Octave" type="reporter" category="sound"><comment x="0" y="0" w="354.8333984374997" collapsed="false">Reports all notes in a given minor scale in order, beginning with the input note and octave.</comment><header></header><code></code><translations></translations><inputs><input type="%s"></input><input type="%s"></input></inputs><script><block s="doDeclareVariables"><list><l>Scale</l><l>Subscale</l></list></block><block s="doSetVar"><l>Scale</l><block s="reportNewList"><list></list></block></block><block s="doSetVar"><l>Subscale</l><block s="reportNewList"><list></list></block></block><block s="doSetVar"><l>Scale</l><block s="reportConcatenatedLists"><list><block s="reportNewList"><list><block s="reportJoinWords"><list><block var="Note"/><block var="Octave"/></list></block></list></block><block s="reportMap"><block s="reifyReporter"><autolambda><block s="reportJoinWords"><list><l></l><block var="Octave"/></list></block></autolambda><list></list></block><custom-block s="Notes of %s after %s"><custom-block s="Chromatic Scale"></custom-block><block var="Note"/></custom-block></block><block s="reportMap"><block s="reifyReporter"><autolambda><block s="reportJoinWords"><list><l></l><block s="reportSum"><block var="Octave"/><l>1</l></block></list></block></autolambda><list></list></block><custom-block s="Notes of %s before %s"><custom-block s="Chromatic Scale"></custom-block><block var="Note"/></custom-block></block></list></block><comment w="90" collapsed="false">Arranges the Chromatic scale to begin with the input note and octave.</comment></block><block s="doFor"><l>i</l><l>1</l><l>7</l><script><block s="doAddToList"><block s="reportListItem"><block s="reportListItem"><block var="i"/><custom-block s="Position of Notes in Major Scale"></custom-block></block><block var="Scale"/></block><block var="Subscale"/></block></script><comment w="90" collapsed="false">Selects the notes of the Minor scale from the Chromatic scale.</comment></block><block s="doFor"><l>i</l><l>1</l><l>7</l><script><block s="doIf"><block s="reportEquals"><block s="reportLetter"><l>1</l><block s="reportListItem"><block var="i"/><block var="Subscale"/></block></block><block s="reportLetter"><l>1</l><block s="reportListItem"><block s="reportDifference"><block var="i"/><l>1</l></block><block var="Subscale"/></block></block></block><script><block s="doReplaceInList"><block var="i"/><block var="Subscale"/><block s="reportJoinWords"><list><block s="reportListItem"><block s="reportSum"><custom-block s="Position of %s Note in the Chromatic Scale"><custom-block s="Get Note %s from Scientific Notation"><block s="reportListItem"><block var="i"/><block var="Subscale"/></block></custom-block></custom-block><l>1</l></block><custom-block s="Chromatic Scale"></custom-block></block><l>b</l></list></block></block></script><comment w="90" collapsed="false">If two adjacent notes in the subscale start with the same note, the second one is replaced with the corresponding notation for the next note in the chromatic scale.</comment></block></script></block><block s="doReport"><block var="Subscale"/></block></script></block-definition><block-definition s="%&apos;Note&apos; Minor Scale %&apos;Octave&apos; Octave" type="reporter" category="sound"><comment x="0" y="0" w="354.8333984374997" collapsed="false">Reports all notes in a given minor scale in order, beginning with the input note and octave.</comment><header></header><code></code><translations></translations><inputs><input type="%s"></input><input type="%s"></input></inputs><script><block s="doDeclareVariables"><list><l>Scale</l><l>Subscale</l></list></block><block s="doSetVar"><l>Subscale</l><block s="reportNewList"><list></list></block></block><block s="doSetVar"><l>Scale</l><block s="reportConcatenatedLists"><list><block s="reportNewList"><list><block s="reportJoinWords"><list><block var="Note"/><block var="Octave"/></list></block></list></block><block s="reportMap"><block s="reifyReporter"><autolambda><block s="reportJoinWords"><list><l></l><block var="Octave"/></list></block></autolambda><list></list></block><custom-block s="Notes of %s after %s"><custom-block s="Chromatic Scale"></custom-block><block var="Note"/></custom-block></block><block s="reportMap"><block s="reifyReporter"><autolambda><block s="reportJoinWords"><list><l></l><block s="reportSum"><block var="Octave"/><l>1</l></block></list></block></autolambda><list></list></block><custom-block s="Notes of %s before %s"><custom-block s="Chromatic Scale"></custom-block><block var="Note"/></custom-block></block></list></block><comment w="90" collapsed="false">Arranges the Chromatic scale to begin with the input note and octave.</comment></block><block s="doFor"><l>i</l><l>1</l><l>7</l><script><block s="doAddToList"><block s="reportListItem"><block s="reportListItem"><block var="i"/><custom-block s="Position of Notes in Minor Scale"></custom-block></block><block var="Scale"/></block><block var="Subscale"/></block></script><comment w="90" collapsed="false">Selects the notes of the Minor scale from the Chromatic scale.</comment></block><block s="doFor"><l>i</l><l>1</l><l>7</l><script><block s="doIf"><block s="reportEquals"><block s="reportLetter"><l>1</l><block s="reportListItem"><block var="i"/><block var="Subscale"/></block></block><block s="reportLetter"><l>1</l><block s="reportListItem"><block s="reportDifference"><block var="i"/><l>1</l></block><block var="Subscale"/></block></block></block><script><block s="doReplaceInList"><block var="i"/><block var="Subscale"/><block s="reportJoinWords"><list><block s="reportListItem"><block s="reportSum"><custom-block s="Position of %s Note in the Chromatic Scale"><custom-block s="Get Note %s from Scientific Notation"><block s="reportListItem"><block var="i"/><block var="Subscale"/></block></custom-block></custom-block><l>1</l></block><custom-block s="Chromatic Scale"></custom-block></block><l>b</l></list></block></block></script><comment w="90" collapsed="false">If two adjacent notes in the subscale start with the same note, the second one is replaced with the corresponding notation for the next note in the chromatic scale.</comment></block></script></block><block s="doReport"><block var="Subscale"/></block></script></block-definition><block-definition s="%&apos;Note&apos; Major Scale %&apos;Octave&apos; Octave %&apos;Position&apos; Note Position" type="reporter" category="sound"><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="reportJoinWords"><list><block s="reportListItem"><block var="Position"/><custom-block s="%s Major Scale"><block var="Note"/></custom-block></block><block var="Octave"/></list></block></block></script></block-definition><block-definition s="%&apos;Note&apos; Minor Scale %&apos;Octave&apos; Octave %&apos;Position&apos; Note Position" type="reporter" category="sound"><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="reportJoinWords"><list><block s="reportListItem"><block var="Position"/><custom-block s="%s Minor Scale"><block var="Note"/></custom-block></block><block var="Octave"/></list></block></block></script></block-definition><block-definition s="note builder (letter %&apos;letter&apos; symbol %&apos;symbol&apos; octave %&apos;octave&apos; )" type="reporter" category="sound"><header></header><code></code><translations></translations><inputs><input type="%s">C<options>A&#xD;B&#xD;C&#xD;D&#xD;E&#xD;F&#xD;G</options></input><input type="%s"><options>#&#xD;b</options></input><input type="%s">4<options>1&#xD;2&#xD;3&#xD;4&#xD;5&#xD;6&#xD;7</options></input></inputs><script><block s="doIf"><block s="reportEquals"><block var="symbol"/><l>b</l></block><script><block s="doDeclareVariables"><list><l>notes</l><l>index</l></list></block><block s="doSetVar"><l>notes</l><block s="reportNewList"><list><l>A</l><l>B</l><l>C</l><l>D</l><l>E</l><l>F</l><l>G</l></list></block></block><block s="doSetVar"><l>index</l><block s="reportListIndex"><block var="letter"/><block var="notes"/></block></block><block s="doIfElse"><block s="reportEquals"><block var="index"/><l>1</l></block><script><block s="doSetVar"><l>index</l><l>7</l></block></script><script><block s="doSetVar"><l>index</l><block s="reportDifference"><block s="reportListIndex"><block var="letter"/><block var="notes"/></block><l>1</l></block></block></script></block><block s="doIfElse"><block s="reportOr"><block s="reportEquals"><block var="letter"/><l>C</l></block><block s="reportEquals"><block var="letter"/><l>F</l></block></block><script><block s="doSetVar"><l>symbol</l><l></l></block></script><script><block s="doSetVar"><l>symbol</l><l>#</l></block></script></block><block s="doSetVar"><l>letter</l><block s="reportListItem"><block var="index"/><block var="notes"/></block></block></script></block><block s="doReport"><block s="reportJoinWords"><list><block var="letter"/><block var="symbol"/><block var="octave"/></list></block></block></script></block-definition><block-definition s="%&apos;Note&apos; Major %&apos;Octave&apos; Octave %&apos;Roman Numeral&apos; Chord" type="reporter" category="sound"><header></header><code></code><translations></translations><inputs><input type="%s"></input><input type="%s"></input><input type="%s" readonly="true"><options>I&#xD;ii&#xD;iii&#xD;IV&#xD;V&#xD;vi&#xD;vii</options></input></inputs><script><block s="doIf"><block s="reportListContainsItem"><custom-block s="Major Scale - Major Chords"></custom-block><custom-block s="Converted %s Roman Numeral"><block var="Roman Numeral"/></custom-block></block><script><block s="doReport"><custom-block s="%s Major/Major %s Octave %s Chord Position"><block var="Note"/><block var="Octave"/><custom-block s="Converted %s Roman Numeral"><block var="Roman Numeral"/></custom-block></custom-block></block></script></block><block s="doIf"><block s="reportListContainsItem"><custom-block s="Major Scale - Minor Chords"></custom-block><custom-block s="Converted %s Roman Numeral"><block var="Roman Numeral"/></custom-block></block><script><block s="doReport"><custom-block s="%s Major/Minor %s Octave %s Chord Position"><block var="Note"/><block var="Octave"/><custom-block s="Converted %s Roman Numeral"><block var="Roman Numeral"/></custom-block></custom-block></block></script></block><block s="doIf"><block s="reportEquals"><custom-block s="Converted %s Roman Numeral"><block var="Roman Numeral"/></custom-block><l>7</l></block><script><block s="doReport"><custom-block s="%s Diminished Chord %s Octave"><block s="reportListItem"><l>8</l><custom-block s="%s Diminished Scale"><block var="Note"/></custom-block></block><block var="Octave"/></custom-block></block></script></block></script></block-definition><block-definition s="%&apos;Note&apos; Minor %&apos;Octave&apos; Octave %&apos;Roman Numeral&apos; Chord" type="reporter" category="sound"><header></header><code></code><translations></translations><inputs><input type="%s"></input><input type="%s"></input><input type="%s" readonly="true"><options>i&#xD;ii&#xD;III&#xD;iv&#xD;v&#xD;VI&#xD;VII</options></input></inputs><script><block s="doIf"><block s="reportListContainsItem"><custom-block s="Minor Scale - Major Chords"></custom-block><custom-block s="Converted %s Roman Numeral"><block var="Roman Numeral"/></custom-block></block><script><block s="doReport"><custom-block s="%s Minor/Major %s Octave %s Chord Position"><block var="Note"/><block var="Octave"/><custom-block s="Converted %s Roman Numeral"><block var="Roman Numeral"/></custom-block></custom-block></block></script></block><block s="doIf"><block s="reportListContainsItem"><custom-block s="Minor Scale - Minor Chords"></custom-block><custom-block s="Converted %s Roman Numeral"><block var="Roman Numeral"/></custom-block></block><script><block s="doReport"><custom-block s="%s Minor/Minor %s Octave %s Chord Position"><block var="Note"/><block var="Octave"/><custom-block s="Converted %s Roman Numeral"><block var="Roman Numeral"/></custom-block></custom-block></block></script></block><block s="doIf"><block s="reportEquals"><custom-block s="Converted %s Roman Numeral"><block var="Roman Numeral"/></custom-block><l>2</l></block><script><block s="doReport"><custom-block s="%s Diminished Chord %s Octave"><block s="reportListItem"><l>2</l><custom-block s="%s Diminished Scale"><block var="Note"/></custom-block></block><block var="Octave"/></custom-block></block></script></block></script></block-definition><block-definition s="%&apos;Instrument&apos; Track %&apos;notes&apos; Notes %&apos;durations&apos; Durations" type="reporter" category="sound"><header></header><code></code><translations></translations><inputs><input type="%s" readonly="true"><options>piano&#xD;organ&#xD;acoustic guitar&#xD;electric guitar&#xD;electric bass (finger)&#xD;ukulele&#xD;banjo&#xD;violin&#xD;cello</options></input><input type="%s"></input><input type="%s"></input></inputs><script><block s="doReport"><block s="reportNewList"><list><block var="notes"/><block var="durations"/><block var="Instrument"/><l>melody</l></list></block></block></script></block-definition><block-definition s="%&apos;Instrument&apos; Track %&apos;chords&apos; Chords %&apos;durations&apos; Durations" type="reporter" category="sound"><header></header><code></code><translations></translations><inputs><input type="%s" readonly="true"><options>piano&#xD;organ&#xD;acoustic guitar&#xD;electric guitar&#xD;electric bass (finger)&#xD;ukulele&#xD;banjo&#xD;violin&#xD;cello</options></input><input type="%s"></input><input type="%s"></input></inputs><script><block s="doReport"><block s="reportNewList"><list><block var="chords"/><block var="durations"/><block var="Instrument"/><l>chords</l></list></block></block></script></block-definition><block-definition s="%&apos;Instrument&apos; Track Repeat %&apos;notes&apos; Notes %&apos;Durations&apos; Durations until Done" type="reporter" category="sound"><header></header><code></code><translations></translations><inputs><input type="%s" readonly="true"><options>piano&#xD;organ&#xD;acoustic guitar&#xD;electric guitar&#xD;electric bass (finger)&#xD;ukulele&#xD;banjo&#xD;violin&#xD;cello</options></input><input type="%s"></input><input type="%s"></input></inputs><script><block s="doReport"><block s="reportNewList"><list><block var="notes"/><block var="Durations"/><block var="Instrument"/><l>melody loop</l></list></block></block></script></block-definition><block-definition s="%&apos;Instrument&apos; Track Repeat %&apos;chords&apos; Chords %&apos;durations&apos; Durations until Done" type="reporter" category="sound"><header></header><code></code><translations></translations><inputs><input type="%s" readonly="true"><options>piano&#xD;organ&#xD;acoustic guitar&#xD;electric guitar&#xD;electric bass (finger)&#xD;ukulele&#xD;banjo&#xD;violin&#xD;cello</options></input><input type="%s"></input><input type="%s"></input></inputs><script><block s="doReport"><block s="reportNewList"><list><block var="chords"/><block var="durations"/><block var="Instrument"/><l>chord loop</l></list></block></block></script></block-definition><block-definition s="%&apos;Instrument&apos; Track Repeat %&apos;notes&apos; Drum Pattern until Done" type="reporter" category="sound"><header></header><code></code><translations></translations><inputs><input type="%s" readonly="true"><options>bass drum&#xD;snare&#xD;mid tom&#xD;high tom&#xD;crash cymbal&#xD;closed hi-hat&#xD;open hi-hat&#xD;cabasa</options></input><input type="%s"></input></inputs><script><block s="doDeclareVariables"><list><l>durations</l></list></block><block s="doSetVar"><l>durations</l><block s="reportNewList"><list></list></block></block><block s="doFor"><l>i</l><l>1</l><block s="reportListLength"><block var="notes"/></block><script><block s="doAddToList"><l>Eighth</l><block var="durations"/></block></script></block><block s="doReport"><block s="reportNewList"><list><block var="notes"/><block var="durations"/><block var="Instrument"/><l>drum loop</l></list></block></block></script></block-definition><block-definition s="Tone Number %&apos;Number&apos; %&apos;newOn&apos; On/Off" type="command" category="sound"><header></header><code></code><translations></translations><inputs><input type="%s"></input><input type="%b"></input></inputs><script><block s="doDeclareVariables"><list><l>message</l></list></block><block s="doSetVar"><l>message</l><block s="reportJoinWords"><list><l>toggleOscillator(</l><block var="Number"/><l>,</l><block var="newOn"/><l>)</l></list></block></block><custom-block s="SendMessageToSoundScope %s"><block var="message"/></custom-block></script></block-definition><block-definition s="Tone Number %&apos;number&apos; Frequency %&apos;frequency&apos; Amplitude %&apos;amplitude&apos;" type="command" category="sound"><header></header><code></code><translations></translations><inputs><input type="%n"></input><input type="%n"></input><input type="%n"></input></inputs><script><block s="doDeclareVariables"><list><l>message</l></list></block><block s="doSetVar"><l>message</l><block s="reportJoinWords"><list><l>modifyOscillator(</l><block var="number"/><l>,</l><block var="frequency"/><l>,</l><block var="amplitude"/><l>)</l></list></block></block><custom-block s="SendMessageToSoundScope %s"><block var="message"/></custom-block></script></block-definition><block-definition s="Tone Off" type="command" category="sound"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doWarp"><script><block s="doFor"><l>i</l><l>1</l><l>10</l><script><custom-block s="Tone Number %s %b On/Off"><block var="i"/><l><bool>false</bool></l></custom-block></script></block></script></block></script></block-definition><block-definition s="%&apos;Pattern&apos; Chord Pattern Repeated %&apos;Times&apos; Times" type="reporter" category="sound"><header></header><code></code><translations></translations><inputs><input type="%s"></input><input type="%s"></input></inputs><script><block s="doDeclareVariables"><list><l>Chord Pattern</l></list></block><block s="doSetVar"><l>Chord Pattern</l><block s="reportNewList"><list></list></block></block><block s="doRepeat"><block var="Times"/><script><block s="doSetVar"><l>Chord Pattern</l><block s="reportConcatenatedLists"><list><block var="Chord Pattern"/><block var="Pattern"/></list></block></block></script></block><block s="doReport"><block var="Chord Pattern"/></block></script></block-definition><block-definition s="%&apos;Chords&apos; Chord Sequence with Chords Played %&apos;Times&apos; Times Each" type="reporter" category="sound"><header></header><code></code><translations></translations><inputs><input type="%s"></input><input type="%s"></input></inputs><script><block s="doDeclareVariables"><list><l>Chord List</l></list></block><block s="doSetVar"><l>Chord List</l><block s="reportNewList"><list></list></block></block><block s="doFor"><l>i</l><l>1</l><block s="reportListLength"><block var="Chords"/></block><script><block s="doRepeat"><block var="Times"/><script><block s="doAddToList"><block s="reportListItem"><block var="i"/><block var="Chords"/></block><block var="Chord List"/></block></script></block></script></block><block s="doReport"><block var="Chord List"/></block></script></block-definition><block-definition s="Major Scale Interval %&apos;Notation - Note 1&apos; Note 1 %&apos;Notation - Note 2&apos; Note 2" type="reporter" category="sound"><header></header><code></code><translations></translations><inputs><input type="%s"></input><input type="%s"></input></inputs><script><block s="doDeclareVariables"><list><l>Note 1</l><l>Note 2</l><l>Octave Difference</l><l>Sign</l></list></block><block s="doSetVar"><l>Note 1</l><custom-block s="Get Note %s from Scientific Notation"><block var="Notation - Note 1"/></custom-block></block><block s="doSetVar"><l>Note 2</l><custom-block s="Get Note %s from Scientific Notation"><block var="Notation - Note 2"/></custom-block></block><block s="doSetVar"><l>Octave Difference</l><block s="reportProduct"><block s="reportMonadic"><l><option>abs</option></l><block s="reportDifference"><custom-block s="Get Octave %s from Scientific Notation"><block var="Notation - Note 1"/></custom-block><custom-block s="Get Octave %s from Scientific Notation"><block var="Notation - Note 2"/></custom-block></block></block><l>7</l></block></block><block s="doIfElse"><block s="reportLessThan"><custom-block s="Get Octave %s from Scientific Notation"><block var="Notation - Note 2"/></custom-block><custom-block s="Get Octave %s from Scientific Notation"><block var="Notation - Note 1"/></custom-block></block><script><block s="doSetVar"><l>Sign</l><l>-1</l></block></script><script><block s="doSetVar"><l>Sign</l><l>1</l></block></script></block><block s="doWarp"><script><block s="doFor"><l>i</l><l>1</l><l>7</l><script><block s="doIf"><block s="reportEquals"><block var="Note 2"/><block s="reportListItem"><block var="i"/><custom-block s="%s Major Scale"><block var="Note 1"/></custom-block></block></block><script><block s="doReport"><block s="reportProduct"><block s="reportSum"><block s="reportDifference"><block var="i"/><l>1</l></block><block var="Octave Difference"/></block><block var="Sign"/></block></block></script></block></script></block></script></block></script></block-definition><block-definition s="Get Octave %&apos;Notation&apos; from Scientific Notation" type="reporter" category="other"><header></header><code></code><translations></translations><inputs><input type="%s"></input></inputs><script><block s="doReport"><block s="reportLetter"><l><option>last</option></l><block var="Notation"/></block></block></script></block-definition><block-definition s="Get Note %&apos;Notation&apos; from Scientific Notation" type="reporter" category="other"><header></header><code></code><translations></translations><inputs><input type="%s"></input></inputs><script><block s="doDeclareVariables"><list><l>Output</l></list></block><block s="doSetVar"><l>Output</l><l></l></block><block s="doFor"><l>i</l><l>1</l><block s="reportDifference"><block s="reportStringSize"><block var="Notation"/></block><l>1</l></block><script><block s="doSetVar"><l>Output</l><block s="reportJoinWords"><list><block var="Output"/><block s="reportLetter"><block var="i"/><block var="Notation"/></block></list></block></block></script></block><block s="doReport"><block var="Output"/></block></script></block-definition><block-definition s="Minor Scale Interval %&apos;Notation - Note 1&apos; Note 1 %&apos;Notation - Note 2&apos; Note 2" type="reporter" category="sound"><header></header><code></code><translations></translations><inputs><input type="%s"></input><input type="%s"></input></inputs><script><block s="doDeclareVariables"><list><l>Note 1</l><l>Note 2</l><l>Octave 1</l><l>Octave 2</l><l>Octave Difference</l><l>Sign</l></list></block><block s="doSetVar"><l>Note 1</l><custom-block s="Get Note %s from Scientific Notation"><block var="Notation - Note 1"/></custom-block></block><block s="doSetVar"><l>Note 2</l><custom-block s="Get Note %s from Scientific Notation"><block var="Notation - Note 2"/></custom-block></block><block s="doSetVar"><l>Octave 1</l><custom-block s="Get Octave %s from Scientific Notation"><block var="Notation - Note 1"/></custom-block></block><block s="doSetVar"><l>Octave 2</l><custom-block s="Get Octave %s from Scientific Notation"><block var="Notation - Note 2"/></custom-block></block><block s="doSetVar"><l>Octave Difference</l><block s="reportProduct"><block s="reportMonadic"><l><option>abs</option></l><block s="reportDifference"><block var="Notation - Note 2"/><block var="Octave 1"/></block></block><l>7</l></block></block><block s="doIfElse"><block s="reportLessThan"><block var="Octave 2"/><block var="Octave 1"/></block><script><block s="doSetVar"><l>Sign</l><l>-1</l></block></script><script><block s="doSetVar"><l>Sign</l><l>1</l></block></script></block><block s="doWarp"><script><block s="doFor"><l>i</l><l>1</l><l>7</l><script><block s="doIf"><block s="reportEquals"><block var="Note 2"/><block s="reportListItem"><block var="i"/><custom-block s="%s Minor Scale"><block var="Notation - Note 1"/></custom-block></block></block><script><block s="doReport"><block s="reportProduct"><block s="reportSum"><block s="reportDifference"><block var="i"/><l>1</l></block><block var="Octave Difference"/></block><block var="Sign"/></block></block></script></block></script></block></script></block></script></block-definition><block-definition s="Harmonic Notes" type="reporter" category="sound"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doReport"><block s="reportNewList"><list><l>1</l><l>3</l><l>5</l><l>3</l></list></block></block></script></block-definition><block-definition s="Harmonic Notes %&apos;Scale&apos; Scale" type="reporter" category="sound"><header></header><code></code><translations></translations><inputs><input type="%s"></input></inputs><script><block s="doDeclareVariables"><list><l>Note List</l></list></block><block s="doSetVar"><l>Note List</l><block s="reportNewList"><list></list></block></block><block s="doFor"><l>i</l><l>1</l><l>4</l><script><block s="doAddToList"><block s="reportListItem"><block s="reportListItem"><block var="i"/><custom-block s="Harmonic Notes"></custom-block></block><block var="Scale"/></block><block var="Note List"/></block></script></block><block s="doReport"><block var="Note List"/></block></script></block-definition><block-definition s="Scale Progression (C - G - A Minor - E - F - C - F - G)" type="reporter" category="sound"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doReport"><block s="reportNewList"><list><custom-block s="%s Major Scale %s Octave"><l>C</l><l>4</l></custom-block><custom-block s="%s Major Scale %s Octave"><l>G</l><l>4</l></custom-block><custom-block s="%s Minor Scale %s Octave"><l>A</l><l>4</l></custom-block><custom-block s="%s Major Scale %s Octave"><l>E</l><l>4</l></custom-block><custom-block s="%s Major Scale %s Octave"><l>F</l><l>4</l></custom-block><custom-block s="%s Major Scale %s Octave"><l>C</l><l>4</l></custom-block><custom-block s="%s Major Scale %s Octave"><l>F</l><l>4</l></custom-block><custom-block s="%s Major Scale %s Octave"><l>G</l><l>4</l></custom-block></list></block></block></script></block-definition><block-definition s="Scale Progression (C - G - A Minor - E)" type="reporter" category="sound"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doReport"><block s="reportNewList"><list><custom-block s="%s Major Scale %s Octave"><l>C</l><l>4</l></custom-block><custom-block s="%s Major Scale %s Octave"><l>G</l><l>4</l></custom-block><custom-block s="%s Minor Scale %s Octave"><l>A</l><l>4</l></custom-block><custom-block s="%s Major Scale %s Octave"><l>E</l><l>4</l></custom-block></list></block></block></script></block-definition><block-definition s="Scale %&apos;Sequence&apos; Sequence" type="reporter" category="sound"><header></header><code></code><translations></translations><inputs><input type="%s"></input></inputs><script><block s="doDeclareVariables"><list><l>Note List</l></list></block><block s="doSetVar"><l>Note List</l><block s="reportNewList"><list></list></block></block><block s="doFor"><l>i</l><l>1</l><block s="reportListLength"><block var="Sequence"/></block><script><block s="doSetVar"><l>Note List</l><block s="reportConcatenatedLists"><list><block var="Note List"/><custom-block s="Harmonic Notes %s Scale"><block s="reportListItem"><block var="i"/><block var="Sequence"/></block></custom-block></list></block></block></script></block><block s="doReport"><block var="Note List"/></block></script></block-definition><block-definition s="Set Backing Track to %&apos;Progression&apos; Scale Progression" type="command" category="sound"><header></header><code></code><translations></translations><inputs><input type="%s"></input></inputs><script><block s="doSetVar"><l>Backing Track</l><custom-block s="Scale %s Sequence"><block var="Progression"/></custom-block></block><block s="doSetVar"><l>Backing Track Durations</l><block s="reportNewList"><list></list></block></block><block s="doFor"><l>i</l><l>1</l><block s="reportListLength"><block var="Backing Track"/></block><script><block s="doAddToList"><l>Quarter</l><block var="Backing Track Durations"/></block></script></block></script></block-definition></blocks><variables><variable name="Violin 1 Notes"><list struct="atomic" id="6868">D4,E4,G4,A4,C5,D5,R,E4,F#4,A4,E4,A4,R,R,D5,C5,A4,G4,D4</list></variable><variable name="Violin 1 Durations"><list struct="atomic" id="6869">Eighth,Eighth,Half,Quarter,Quarter,Quarter,Dotted Half,Eighth,Eighth,Half,Quarter,Quarter,Quarter,Quarter,Eighth,Eighth,Eighth,Eighth,Dotted Half</list></variable><variable name="Cello1 Duration"><list struct="atomic" id="6870">Dotted Half,Dotted Half,Dotted Half</list></variable><variable name="Cello1 Notes"><list struct="atomic" id="6871">D3,G3,C4</list></variable></variables></project><media name="Mod7 With Drum" app="Snap! 6, https://snap.berkeley.edu" version="1"></media></snapdata>