<snapdata remixID="10423827"><project name="reminder system" app="Snap! 6, https://snap.berkeley.edu" version="1"><notes>hello! &#xD;green flag, then answer the sprite&apos;s questions.&#xD;even if you don&apos;t like the reminder system, the coulor changes, so that should be amusing&#xD;also you might have to go inside and turn on javascript extensions, i notice that with projects using javascript extensions:(&#xD;if you set a date for today, you might have to click the green flag again to see it remind you</notes><thumbnail>data:image/png;base64,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</thumbnail><stage name="Stage" width="480" height="360" costume="0" color="255,255,255,1" tempo="60" threadsafe="false" penlog="false" volume="100" pan="0" lines="round" ternary="false" hyperops="true" codify="false" inheritance="true" sublistIDs="false" scheduled="false" id="1"><pentrails>data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAeAAAAFoCAYAAACPNyggAAACtUlEQVR4nO3BMQEAAADCoPVPbQwfoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+Bo3+AAF/RMkcAAAAAElFTkSuQmCC</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="the disco fun" idx="2" x="0" y="0" heading="90" scale="1" volume="100" pan="0" rotation="1" draggable="true" costume="1" color="155.54999999999998,0,74.66399999999993,1" pen="tip" id="8"><costumes><list id="9"><item><costume name="Untitled" center-x="240" center-y="180" image="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAeAAAAFoCAYAAACPNyggAAAgAElEQVR4nO3de2xU553/8e947Bl7fA2XsiiBuOQXZEII7iURARd5VUSpmyruJtxEmrKYSxUFxcRpoqhA7D/yA5J0vVVCo3RT3CZtf22hQo4U0hQqR2mUBErjDRRigw0G45EjEJYFCgJhfX9/nJx2OvUwt3PO97l8/nhpq2w3mfOw2/c+l/McihMxAAAABIukfwAAAICNEGAAAAABCDAAAIAABBgAAEAAAgwAACAAAQYAABCAAAMAAAhAgAEAAAQgwAAAAAIQYAAAAAEIMAAAgAAEGAAAQAACDAAAvuuJxHj/hFt517SvcvttC7lt1je5Ze4D3H7bQt4zZRYfLJss/huDhgADAIAveiIx3jNlFi9f8H2uWPEq08O/Tmv5gu9z+20LxX97EBBgAADwVE8kxi1zH8g4uqmsu/u74s/iJ2sDfCLqeHcS8W9nEL95s+Ov5fK/DQBAV+23LeRp//HjvMKbqGLFq8bOiK0K8ImoE9mnv0Zc9zDx/3k0tae/5oRZ+jebaIgqeYgqeZDu5AFq4DO0gM/QAh6kaeK/DQBy0xOJ8fIF3/csvMnmL94s/oxesybAb95MvGTFjaM7niUriF+tkf/9OhuiSj5DC7ifnuRP6B0+Rv38N7qQ0if0DvfRs3yGFoj/dgBIrycS4yX//rhv8XXNvm+bUYe1jA/wiSjxfzZkH97xQnwiKv88OhmiSu6jZ9MGN50+epaHqFL8eQDgX/VEYp4uOWeyJG1KhI0O8LuT0i81Z6N2nfP3lH4u1Q1RJffTk3mHd7wQSz8bAPxDUDPf8WbC0s/uBWMD/O4kJ5hexTcRIpzaGVrAx+kjT8Ob6Bj1Y2kaQBF+7vnasCdsZIBPRHPb781mJozl6H91ijZ4PutN5RRtEH9eAJvtmvZVsfi6dD8dbWSAvdjzTWfpd+SfUyV99Gwg4cWSNIC8nkiMZ9+3TTzAFSteFR+LfBgX4Ddv9j++Lrym5OinJwOPr+skvSj+/AC2aZv1TfH4mjALNi7AS78TXIDrHpZ/XmmnaINYfP+xHL1CfBwAbBLkqWeTZ8FGBfjdScHF1/XmzfLPLWWQ7gxszzcdHMwCCMb+CbeKRzfZrmlfFR+XXBgV4GfvCT7AG78u/9wShqiSP6F3xMPrOkb94mMCYIOWuQ+IBzfZ8gXfFx+XXBgVYD9PPqdSu07+uSWosPSMpWiA4Km0/Kz7MrRRAQ46vi7bXkkaokpf3/XNZxaMG7MA/NMTiYnHNpWeSEx8fLJlTID/Wi4XYNsu5pA89ZwOXk0C8I+K+7+u/RNuFR+fbBkTYIkDWC7bDmKpOPtNnAVLjw+AqfZMmSUe2lT2TJklPj7ZMibAkjNgmwI8SHeKRzYdfNYQwB/tty0UD20qbbO+KT4+2TImwCeicgH+a7n88wdFxcNXyXBNJYA/VLh+MhUdL+QwJsBx8u/jC+lIP3eQTtBr4oFN5zh9JD5OACZSeQlax3eBjQqwl58ezNSSFfLPHSSV939d2AcG8IfKp6BxCEvYj+cGH+Bn75F/7iBJxzVTeB0JwHsqB/hg2WTx8cmWUQGW2Ae26wDWNPGwZmqQ7hQfLwATqXgRx+z7tomPSy6MCnCcgvkUoes/G+SfN0g6nIB24W5oAH+oeBXluru/Kz4uuTAuwEG+jmTT7DdOes2AEWAAf6i4DK3jO8BxMjDAcSJ++mv+x/fpr8k/Z9CGqFI8rJkvQeNdYAC/qLQMPe0/fiw+HrkyMsBx8ve7wEtW2Hf/s0uVzw+mIz1OACZT6X1gHd//dRkb4BNRf76OVPewvfGNkx6vIeE9YAD/zb5vm3h85y/eLD4O+TA2wHFyQunlTHjpd+yOb5yIT9KL4oFN5wS9Jj5OAKZT4cMMuu79uowOsCvfPeHadc7fw/b4xon4FK0QD2w6/fSk+DgB2KBt1jfF4qvryedEVgQ4Ts7XkjZ+PbdZr22fG7wRHQ5i4QAWQHCW/Pvjgcd3+YLva/n932TWBNh1IurcmLX0O+NfXVm7zvnv/XguwpuKyvvAn9A74uMDYJsg94Nn37fNiPjGycIAj+ev5Q4sMWdG5WVoLD8DyFi+4Pu+x3fJvz9uTHzjhABDjlScBR+nj3AHNIAgP2/Japn7gPjzeQ0BhpwMUIN4cJOdohXi4wJgu/0TbvV0Njx/8WYtv3SUCQQYcvYJvSMeXVcvdYqPBwD8w54ps/LaG56/eLOW3/jNBgIMORuiSiVuxjpG/fj6EYCieiIxbpv1TZ6/ePMNg1ux4lWev3gzt8x9wNgZbzIEGPIi/YWkY9TPA9QgPg4AkJmeSIwPlk3mXdO+ynumzOL9E2416mBVNhBgyJvkfvAp2iD+/AAAuUCAwRNBR/gY9SO+oKQjBcTvFRLvKyL+bZT49SjxzhLi/yl2/vXeiONAIXFPSP73ghwEGDwzSHcGsieMZWdQzaGwE9UfxYifLsvOzhIn1IfC8s8BwUKAwVNDVOnrBxt6qRNXTYISBkLOTDeX6KayLebMjKWfDYKBAIMvztACTy/r6KVOzHpBGYfC3oY32Y8QYisgwOCrU7SCe6kz56XmXurkU7QBN1yBEgZCzl6uX+EdL8TYJzYXAgyBGaAGPkkvci91jjs7Pkb9/Am9wyfoNT5FKxBdUMqRAmeJOKj4up4pdf7Z0s8P3kOAQdQgTeNBmobYgtL2FTkhDDq+ifYVyY8DeAsBBgC4gX1FsuFNtDciPx7gHQQYACCFA4Xy0U2Gw1nmQIABAMZxpEB+2TkV7AmbAQEGAEgyEJI5cJWpZ0pxOtoECDAAQJLXo/KRTWdnifw4QX4QYACABIfC8nHN1HvYD9YaAgwAkGBniXxYM7UtJj9ekDsEGADgc+8peOo5HZyK1hcCDADwOZ1mv65nSuXHDXKDAAMAkPNqj3RMc4UT0XpCgAEASK0br7KFayr1hAADAFCwXznyGg5j6QkBBgDrDYTUvfUqU1iG1g8CDADW0+nd31QOheXHEbKDAAOA9VT86EK2sA+sHwQYAKyn8wEsFz5VqB8EGACstzciH9B8vR6VH0fIDgIMANbT4eML6fxPsfw4Qna0C3BPqJj3hKdzW9Hd3BKp43XRRTy/ZBUvKX6Al0fv45ZIHbcV3c17wtPFfysA6OG3BgQYM2D9aBHgnlAxtxfO4fklq7iidBNT2dMZW1L8ALcV3c09oWLx5wAANZmwBP1bBFg7Sge4J1TM66KLso5uKuuii/hgqFL8uQBALSacgsYhLP0oGWCvwzteiKWfEQDUoeNXkJLhq0j6US7Ae8LTeVrsEV/Cm6iidBP2icFKw1VhHq4K8/naGF9srOIL9eV8ob6cP62OiP82KTp/iMH1HgKsHaUC3FZ0t2+z3lTaiu4Wf24APw1XhflCfTlfap3K17pn8dhILTN/JaVr3bP4cvs0vlBfLv7bgzIQkg9oPp4pxVWUOlImwOuiiwINL5akwXTDVWG+3D4tbXDTudw+jYerwuLP4zedX0XCK0h6UiLALZE6sfi6lkfvEx8HAC8MV4X5UuvUvMM7Xoiln81POh/EwgEsPYkHuK3obvH4utoL54j/geikL0T8QSHxG1Hi/1dM/LMS4hdjzr8+UOT4GBfEB+pCfTlfPz3H0/AmGhupNXZpWudlaCw/60k0wPsLpgS+55sODmal1hdyYvtEBXHDJOL6yZl7osIJcx/+g8I3o81f8HzWm8po8xfEn9cPOn4TeGeJ/LhBbsQC3BMq5tmxNeLBTVZRukn8D0UlfSFnZvu9m7KP7o1i/CI+IO6py+3TAgmv6UvSPRrOgvEZQn2JBViFfd9UWiJ14n8w0vpCzox16QRvojuehknOP0P6WXV3qXVq4PF1fdZRLf78XtNpFozDV3oTCXBPqFi5pefkWbDNN2YdKHJmvH6FN9n3bkKIczXa/AWx+LpGVk8UHwcv6bQXjNmv3kQCrPLs12Xjqei+kLM8HFR4xwsx9ogzd742FtiebzqmHczS4ZUk3P2sv8ADrPrsN5FNH3D4oNDf5eZMLZ3g/Bbp8VDdcFWYr3XPEg+va2ykVnxMvPajmHxkU/lRzJmpS48R5CfwAO8qnCke1kzZ8lrSgSLvDlh55Q38f/c3pMLSsw1L0dsUjDBuvTJH4AFeUvyAeFgztaT4AfE/IL/9rES9+LqwLzy+4aqwr+/65jMLNu3GLNXuiH6mFHc+myTwAAfxoQWvmP5Kkooz32QHiuTHSTWSp57TMfHVpENh+fC68cUXj8wSaID3F0wRj2q2TL2Y4+Ow+vGtn+z8RuwJ/zMVZ7+Js2Dp8fHDkQLZ5WjMfM0UaID3hKeLBzVbJu4D94WCfc0oX0sn4HS063xtTDyy6Zj6WcOBkMzBrB/FsOdrqkADrNK9z5ky8XOFkq8a5eqRKvlxU4GKh6+SmXpNpeu3Ab2i9Eyp88/CaWdzIcBpmHYr1htR+ZjmCiejia/svU08sOlcP23eqlGynpC/7wrvLHGWvaWfE/wVaICXR+8TD2q2TDsJ/UiVfEhztXSC/PhJU3n/12XqPvB4jhR4F+JnShFe2wQa4HXRReJBzZZJN2LpPPt12f5qknRcM2Xa60iZeK8w+xg/U+rc53ygEEvNNgo0wDpcQZlsXXSR+B+SF3Q7eJVKwyT5sZTyaXVEPKyZOl8bEx8vST0hJ8gHCon3Rhy/jRLvK3L+2qGwM9NFdO0WaIDbC+eIBzVbppyCNmH26/qZpd8/1eEEtMu0u6EB/BBogHW6htK1q3Cm+B+SF3Q8+ZzKExXy4ylBpxkwAgyQXqAB7gkViwc1W/sLpoj/IeWrL6THpRuZaphk53vBw1Vh8bBmytR3gQG8hKsob8CUqyhNWn522XoYS5XPD6YjPU4AOgg8wDqdhDblANaOMvlgeu2ZcvlxlaDDa0g2vAcM4AV8jvAGTNn/VeE7v16z9TT0Zx3V4oFN58re28THCUAHgQc4TnosQ1eUbuKeULH4H5AXpGPpFxv3gUdWTxQPbDqXWqeKjxOADkQCrMPrSKZcQflxWD6Ufvk4LD++QdPhIBYOYAFkRiTAcVJ7Fjwt9ogxs98PCuVD6RdbvxWs8j7wte5Z4uMDoAuxAKs8CzbpC0gHiuRD6RdbT0KrvAyN5WeAzIkFOE7Es2NrxGObbHZsjTGz3zg5kZIOpV9svRErTmrOgq+fnmPlHdAAuRINcE+omCtKN4lH11VRusmIizcSmfgOsO0z4DgRX2ysEg9uspHVE8XHBUAnogGOE/H+gini4XXja8prR4lMDrDt3we+1j1LPLquq13m/d8OZK+XYvwy1fEmWskN9BTXURvXURsvo428lpr4OVrMvWT3hzoSiQc4Tmq8G2zSvm8ik09B23oIyzVcFVbiZqyxkVrrv35ku06q4Tpq4xm0kydTR1oN9BS/TGa8aZIPJQIcJ7kIV5RuMja+cXLelZUOpV9sfA0pmfQXksZGavliY5X4OICMLprODfRURtEdTx21cRdNF38OKcoEOE7OcnSQe8KmLjsnM+lDDImkx1UVkvvBo81fEH9+kNFJNRnPeNP5FX1Z/HkkKBXgODkHs4I4HT2/ZBUfDFWKP28QvneTfCy99r2b5MdVJUFHeGykFvG12HO02LP4umxcklYuwK72wjm+XNYxO7aG24ruNupVo3RM/BjDjjL5cVXN+dpYIHvCWHa228tU53l8bZ0JKxtgV1vR3Z6E2N3rtSm8LhNvw7L9BHQqw1VhXz/YcLVrJq6atNhhmuRbfF027QkrH2DXnvB0bonUZbU8PTu2hlsidby/YIqV4U1k0heRGibZ+SGGbFyoL/f0so6rXTMx6wVeS02+xtc9IS39nEHRJsCJekLFvCc8nXcVzuT2wjncEqnjddFF3FZ0N+8qnMn7C6ZYs7+bKZOWoZ+okB9PXYysnshXu2bmvNR8tWsmjzZ/ATdcAXdSje/xtW0pWssAQ/ZMuhMay8+5udhYxZ91VPPVrpnjzo7HRmr5WvcsvrL3Nh5ZPRHRhX+yjDYGFuBltFH8eYOAAFvEhNPQj1TJj6NJPq2O8KfVEcQWbqiXYr7v/Saz4cYsBNgiJhzGsv32KwAJv6IvBxrfyWTHa0kIsGWeqJCPaK6w9wsg4zlaHHiAt9D94s/tNwTYMjrfDY3ZL4CMIE4/27gPjABbSMcT0bh4A0BOkAewXDa8joQAW+qRKvmoZuqRKrz3CyAJAfYHAmypvpAep6KXTkB8AaRtopWBB3gtNYk/t98QYIt9HFb7S0kNk5yT29LjBGC7LXR/4AHeRCvFn9tvCLDlDhSpGeGGSbhwA0AVEq8h2XAbFgIM/HFYreXo793k/CbpcQGAfwjyIo4ZtBMXcYBdVHhHGAeuANQU5KtINryCFCcEGJJIvaLUMMn5ZyO+AGrqpVhgAe6kGvHnDQICDP/ig0LiZ8qDnfXisBWo7GRViN+qD/PO5ghvbY9yS0cxP9QV4w17S3jD3hLe0RrhHa0Rfqve7Du1g5gF23D62YUAQ0ofFPq7LI3wgureqg9zS0cxzxsp4zlcnrGWjmL++eoi8d/vtV6K8Vx63rf4zqXnrdj7dSHAkNYbUeIXY847uflGd+kEZ6kZ4QWVvVUf5sbu0qyiO57G7lLjQnyYJvl28MqWpWcXAgxZOVBE/LMSZ/aaLsgNkxyPVDkBR3RBdd3VBbxhb0ne4U32UFeMu6sLxJ/PK51U43l8bXjtKBkCDHn7OOyE+Y2o818/KHT+Gg5UgU7eqg/zotP5z3pTmTdSZtQecRdN92Q5ei49b93M14UAA4D1djZHst7nzdXO5oj483op12sqZ9BO3kQrrdrzTYYAA4DVdjZHAglvIhP3hTfRyowu63DD20XTxX+3NAQYAKz159qCwGa+yUxajk7USTX8MtXxFrqf11ITr6Um3kQr+TlazF003eoZbzIEGACs1F1d4OuebyZ7wiYdzILsIcAAYKWWjmKx+Lo27C0RHweQgwADgHXeqg+Lx9f0pWhIDwEGAOs81BUTD69r0elS8fEAGQgwAFjlz7UF4tHFLBjihAADgGV2tAb/2lE6LR3F4uMCwUOAAcAqkiefU5k3UiY+LhA8BBgArKHi8rMLryTZBwEGAGv8fHWReGhTMe2KSkgPAQYAa0hcO5mpHa0IsG0QYACwhooHsFw4iGUfBBgArOHHt369glux7IMAA4A1trZHxUOLGTC4EGAAsIbKAd7aHhUfHwgWAgwA1sAhLFAJAmyJ3qoK/mXjYt7RvIab27dyc/tWXtL1G57fvY/vOv0eL937U27qeIE3tzbz5tZm7qyfJ/6bAby2p7FQPLSp/Hx1kfj4QLAQYIP1VlXwjuY1vKTrN1w9coQn8kDWlu79Ke9oXsO9VRXizwOQr5NVIfHQpoKLOOyDABuos34ez+/el3N0U1nS9Rv+yeoHxZ8PIB8qXkXZ2I0vItkIATaIG14vozue+d37sEQN2lLxXWAcwLITAmyArto7uKnjBd/DO97y9F+qbxF/foBsqLgMjc8R2gkB1twvGxd7vtScrV82LhYfB4BstHQUi0fXhQs47IUAa2xza7N4fF2bW5vFxwMgU6rMgueNlPGfa3H4ylYIsIZ6qypElpzTWdL1G/GxUdX5wrv4YuTbPBL9Lo8WP8qXSn7II9Hv8oWihXy+8C7x32cjFWbB2Pu1GwKsmd6qCl6696fisU1lfvc+8TFSwXCoki8ULeTLpc/z9Zt6mCdeSety6fN8MfJt8d9uk8ZuuRPRjd2lfLIqJD4GIAcB1oyKM1/MhP/ZhaKFfK3yYEbRHc/1m3p4JPpd8eewwcmqEM8bKcPSM4hAgDWyo3mNeFwztaN5jfh4BS3f8Ca7VnmQLxQtFH8u0/25tiDw+O5pLBR/bpCHAGviJ6sfVObAVaZsOh09Wvwoj00Y9iy+iUaLHxV/PtP9ubYgkJkw4guJEGAN/KX6Fu3i67LhPeHLpc/7Et7k/WHp5zTdyaqQr3vCjd2luG4S/gkCrIHm9q3iIc3V0r0/FR8/P10q+aHv8XV9Vmb2WKrC6y8mzRsp4x2tERy4gn+BACuuq/YObWe/rq7aO8TH0Q+jxY8GFl8XDmcF42RVKO/XlOaNlPGGvSWY9UJKCLDilnT9Rjyg+TLx1aTzhXf5tuebDg5mBedkVYh3Nkf4oa5YxtF9qCvGO1ojOOUMaSHACvtl42LxeHrFtANZVyveFokvT3ReU5J+flvtaSzkn68u4h2tEd7RGuGt7VHe2Rzhn68u4rfqw1hmhqwgwApT+cKNbJm0F3wx8m2x+GIpGsAcCLCieqsqtN/7TdZbVSE+rl6QnP26xiYMi48DAOQHAVaUScvPrp+sflB8XPN1vvAu8fhiLxjADAiwokxafnaZsAwd5GtH6eC1JAC9IcCKuuv0e+LB9Fr1yBHxcc2Xl1dNYhkawG4IsIK6au8Qj6VfOuvniY9vrj4tuFU8usmGQ5Xi4wIAuUGAFdRZP088lH7R+SMNKu3/uvAtYQB9IcAK0umrRzYF+ELRQvHgJsP3gwH0hQAryOQAb25tFh/fXI1Evyse3GT4UhKAvhBgBTV1vCAeSr/ofBJahQs4kuFCDgB9IcAKMvEVJNeSrt+Ij2+usAQNAF5CgBVkwgcYTAywiqegcQgLQF8IsIJ0/v5vOk0dL4iPb66GQ5XiwU32acGt4uNikz66nbtpOR+kx/h92sxd9BIfoF/w2/R7fpe28/u0mQ9TEx+mJj5NU8V/L6gNAVbQ5tZm8VD6pbl9q/j45kOliziuVR4UHw8b9NCX+DA18QH6Bb9B72eli17ig/QY99CXxJ8D1IMAK+gnqx8UD6VfdH4NKU7Eo8WPiofXdankh+LjYbIe+hJ30UtZRzeVA/QL7qPbxZ8L1IEAK8jEDzG4dP8usErL0PgYgz/66HY+SI95Ft5k79J2LE8DxwkBVlJvVYV4KBHg1K6U/048vlcr3hYfBxN103J+k/7oW3wTddNy8ecFWQiwovAxBnWpcBoas19vDVKZr7PeVA7SY+LPDnIQYEWZeBJa5xPQyT4r+6lYfK+U/078+U0ySGX8Lm0PPL6JB7WkxwBkIMCKMnEf2ITlZ9dwqJLHJgwHHt+xCcN499djkvFFhO2GACuseuSIeDS9Uj1yhHurKsTH1EtB34w1NmEYN195rJuWi8fX9T5tFh8PCBYCrDCT7oTW+Q7oGwnyfmh8eMFbKsXXdYQaxMcFgoMAK+wv1beIh9MrnfXzxMfTL35HeGzCMOLrsdM0NbDTztnCK0r2QIAVZ8Is2NTZb6LzhXf5sieMZWd/SJx4ztS7tF18fCAYCLDidH8nuHrkCHfV3iE+jkEYDlV6ejr6asXbuOvZByrPfl24McsOCLAGdL4bWve7n3NxvvCuvEJ8teJtnHT20fu0WTyw6eBUtB0QYA30VlVoeTHHXaffM+7kczaGQ5U8WvwoX614O+0y89WKt3m0+FGE12d9dLt4XDOFvWDzIcCa0O1AVvXIEaMPXuViOFTJ5wvv4ouRb/OFooV8vvAuHg5V8nCoUvy32ULFk8+p4KpK8yHAGumsnyce1kz9ZPWD4uMFkEyFSzcy9Tb9Xny8wF8IsGZ2NK8Rj2s6Nu77gvoGqUz5w1dYhrYLAqwhlV9Naup4wep9X1DXcVooHtRsYRnabAiwplQ8Gb25tVl8XABS0Wn/FwG2AwKsMVX2hKtHjmDPF5R3mJrEg5otfK7QbAiw5rpq7xB9Remu0+/htDNoQYf3f5PhViyzIcCGCPpwVvXIEd7RvAb7vaANnU5Auw7QL8THLVfnC2bwaKSRL0fX85WSLXyt9CW+XtrB10s7+GpsO18p2cKfFT/OlyKr+HzBDPHfKwEBNozfB7SqR45wU8cL/JfqW8SfFSAbXfSSeFCzpduNWBfCc/hSZBVfK32JuXxfVsbKdvPl6Hq+EJ4j/hxBQYAN1FV7Bze3b/X0e8LVI0e4uX2rNfc6g3lU/gBDKrp8I/hCeE5O0U3lWulLPFK0SPy5/IYAG66zfh5vbm3m+d37so7u/O59vLm1mbtq78BSM2gPh7C8dyE8h6+UbPEsvMmuxrbzpwVTxJ/TLwiwRXqrKrizfh7/snEx/2T1g7y5tZmbOl7gpo4XuLl9K+9oXsO/bFzMXbV3YKYLxjlCDeJBzdZhahIft1RGI408Vrbbt/gmGo00ij+vHxBgALCCjhdxHKeF4uOWbDhUypej6wMJb6LL0fXiz+41BBgArDBIZeJBzcab9EflrqIcDpX6uuScyd7wcKhUfBy8ggADgDV0ehdYtXeApeObuC8sPRZeQYABwBo67QOrtv8rseycypWSLeLj4QUEGNRVTjxUQzx0swK/BYyg0zK0SsvPo5FG8egmM+E1JQQYlHHuHuKzjxIP7CU+fYj4dM+/OvMa8dmnnTBL/17Qkw7L0Cq9//tpwZTATjtnS/dXlBBgEHfuns+jO05wb2RgL/Hgd+R/P+hF9Vnwm/RH7qPbxcfJ9Vnx4+KhNXUpGgEGMUM1zow22/COF2LMiCEbKl/KodLe74XwHPHIpqPzPdIIcBpDpY6zM4gH7iUemOMYnCL/23R27p7Uy8w5OeT8PaWfC/QwSGX8Nv1ePLbjzX4HqUx8fFxXY9vFA5vOtVK97stOhAAnGSp1Atu3ivj4S8RHdxMf2Zfa8ZeIT653/mekf7suBh/2OL4JsCQNmeqj28WDmxxflS7eOF8wQzyumdJ1LxgB/txQqRPSdMFN5+R65+8l/TyqGqrxL74uzIQhUyrdjtVNy8XHI5GKJ59TuRRZJT5eubA+wEOlzmw33/COF2LpZ1PN0M3+x9ddjsaeMGRKhVPRKn50QYflZ9dY2W7x8cqF1QEemEN8rMPb8CY6uhtL04nObgsgvp8785r884I+JD9VeJAeU2rfN07OrVfSUbVhGdraAPc3ej/rTaW/Uf55pZ27J7j4/n0p+uvyzw36CHo5+r2VijEAABBWSURBVE36Ix+hBvHnHs9I0SLxoGZLxy8mWRngk+uDCS+WpP/Bi9eNsjXwJ/nnBr300e2BnI5W7cBVMp32f1067gNbF+C+VcHH13XicfnnlzB0c/DxdeEay38YCBH3FRD3hIn/Vkh8tJD4oyLi/y1y/vXxsKM3THw2JP97JXXTct/C203LlVtyTqbSvc+Z+qz4cfFxy5ZVAe5vlIuv69Qi+XEI2uDDcgEefFj++UX/d77AierhCPH70ex8VOSEur9A/jmkeLU3/Cb9kQ/SY0rd73wjKnz1KFs63oplTYDPzghuzzcd2w5mnXlJLsBnXpJ//qCdI2emm0t0UzkUcWbG0s8m5TgtzPq09Jv0R36XtvMRalB+xptMpxPQLh0v5LAiwEOlzoUZ0uF1Hd0tPyZBGviTXIBPH5J//iD1exzeZIctD3GcnBgfp4V8mJr4MDXx+7SZ36XtfJAe425azkeogfvodu2imwgBDoYVAVZh6dnmpWjRAPfIP38QzpGzl+tXeMcLse37xCbTcQ/4amy7+Lhly/gAD5X6+65vPrNgW27Mkozv6R7ieLn8GPhpIOQsEQcVX9eHUeefLf384D0dA3w5ul583LJlfIAlTz2nc9KGV5PK5QNs8knonrATwqDjm6jH8iVpE12KrBIPKgJsABVnv4mzYOnxCUIg109auATdE5YNb6LjiLBRLhbeKx7UbF0svFd83LJldIDPzpCPbDo2fNZwYK9cfE29jKNXofi6bD+cZRJcRRkMowOs4uGrZDZcU3l2m1yATXwNaSAkv+ycCvaEzaHTu8A6noCOk+EB7tkiH9h0jnXIj5PfBr8jF2DTLuI4RzIHrjL1YRSno02h033QOl5DGSfDA6zy/q/Lin1gwYNYph3AOlooH9l0PiqSHyfIn07L0DouP8fJ8ABLxzVTNryOJLEMbdryc3+BfFwz1Wfx9ZUm+az4cfG4pqPjFZQuYwM8OEU+rJk6O0N+vHwnMAs+d48Cz+2hjwK8aCNfhyLy4wX5U30WPFa2m88XzBAfp1wZG2AdTkC7bLkbOshZ8Nlt8s/rpT6NZr8unIo2g8qzYB3f/U1kbIB1mgHbEuB4eTCvJA3sJeNuv9Jp9uv6MCo/bpC/4VApj5XtFo/teLNfXfd+XcYGeKhUPqyZsuFd4L8rJ38v5jhEPFSjwHN6aCAkH9Nc4US0GS6E54gHNzm+Ol68kczYAMdJnc8PpiM9TkEbqvEpwoeIz31d/vm8ptKNV9nCNZXmUOl2rNFIo/h4eMHoAOvwGpIN7wGPy+Pl6IG95r1y5AryK0dew2Ess6iwH6z7vm8iowN84nH5wKbTs0V+nCSdfTr/We/Zp8m4PV/XOVL31qtMYRnaLJJfSrocXc/DoVLxMfCK0QE+tUg+sOn0rZIfJ2lDN+dwQvoQ8ZnXzNvvTabTu7+p9OOdYOOMRhoD3/M1Zdk5kdEB1uEgllUHsDJw7uvOjPbMa86HFNzYDvzJWWY+89Ln+7yGzniTqfjRhWxhH9hM5wtmBHI62pQDV+MxOsBxUnsf+LhhNzWB93Q+gOXCpwrN5tdseKxsN1+KrDJqyTmZ8QFWeRkay8+QznEDAny0UH4cwV/DoVLPDmiNle3mKyVbtH/HNxPGBzhOas6Cj3XYcQc05EeHjy+k87/4OINVRooWZR3jsbLdfDW2nUeKFhk9401mRYAH7pUPbrJTi+THBdT3NwMCjBmwvS4W3ssjRYv4UmQVX4qs4islW/hKyRa+HF3Po5FGHo008oXwHKuim8iKAMfJ2W+Vjq7rk+3y4wF6MGEJ+m8IMMC4rAnwUKkaN2Md3W3J14/AEyacgsYhLIDxWRPgOMl/Ienobmc5XHocQB86fgUpGb6KBDA+qwIcJ9n94P5G+ecHvej8IQZXHy7iABiXdQGOU/ARProb8YXcnCP5gObjwyiuogRIxcoAx8lZjg5iTxjLzpAvnV9FwitIAKlZG+A4OQez/PxgwyfbcdUk5E/ng1g2H8DqpRh3Ug0/R4t5E63kBnqK66iN59LzPJee5zpq42W0kddSE2+h+7mTasR/MwTL6gC7BuZ4e1nHJ9sx6wXv6LwMbdvysxvdtdTEM2gnT6aOrK2lJn6Z6sSfBfyHACc4tciJZ65LzZ9sd/Z6ccMVeE3HbwJ/ZNHycy/F+GWq47n0fE7RTQUhNhsCnMLAvc7y9Cfbx58dH93tXO7Rs8UJN6ILfjqr4WloWz5D2Ek1XEdtnoY3UR21IcSGQoCzMDjFgdiCBJ1mwTYcvuqlGC+jjb6Fd7wQ91JM/LnBOwgwgCZ02gs2ffbbRdM9X27OxFx6nrtouvjzgzcQYACN6PBKkul3P3dSTc4HrLzyK/qy+DhA/hBgAM0cjshHNpXDEWemLj1GflEhvi68tqQ/BBhAM+eI+JCCETb91qvDNEmZ+E6mDp5BO7EcrTkEGEBDqt0R/WHU7Dufeynm60nnXM2l53EwS2MIMICm+hX5UtKHUfO/eBTkaedsNdBT4uMDuUGAATQ2EJJdjjZ95hsn4l/Rl8Ujmw4OZekJAQbQ3DmSOZh1OGL2nq+rgZ4SD2wmS9HS4wTZQ4ABDPG3gF5R+jDq/LNMPu3s0mH268JtWfpBgAEMcjbk77vCHxU5y97SzxkUFQ9epTKDdoqPF2QHAQYw0ICHIf7QwvDGybntSjqq2cJesF4QYADD9RVkH+MPo859zr1hO5aax7OF7hcParbWUpP4uEHmEGAAi5wNOUHuDRMf/9zfCol7ws5f6y9wZrq2RjeRxF3P+cIytF4QYACAJDouP7sO0yTx8YPMIMAAAElepjrxkObqOVosPn6QGQQYACDJc7RYPKS52kL3i48fZAYBBgBIspaaxEOaq2W0UXz8IDMIMABAEpXvfk4Hd0PrAwEGAEiiw/WTqeBaSn2IB/jg1GnctnIDr2t5lpe3vsjzX+nkJS+8xstbX+SW9U9yy/on+eDUaeIDZbr+MHFXKfErk4m33Uz8RDXxI7cRr55JvGW689demez8e6R/K4DfdA5wHbWJjx9kRiTAPeWV3LL+SZ7963eYDl/IyPxXOnldy7OIsce6Son/+9+Il9UQf3t25rbdTHy0SP73A/hB5z1gLEHrI9AA95RX8rqWZ7miqz/j8I5nXcuz4gOnu6NFuYUXISYerijm4Ypi8d8B/tlEK8VDmivchqWPwAK85ysLeNobH+UV3mR7vrJAfAB19PrE/MOb7PWJ8s/lh/Ozp/Jo0wK+9oeNfP2DH/DYsa3Mg//3765/8AO+8upDfGnT1/nTW24S/73gDR2voXRtopXi4weZCSTAbSs35D3rTaVt5QbxQdRFf9iZ9XoZ3kT//W/yz+iVC/d+ka/9YeM/xTYTV3+3lkeW4kJ83en0GcJk+CyhPnwPcMv6J30Jb6KW9U+KD6QOtkz3L76uJ6rlnzMfuYY32bU/bOTzs6eKPw/kppdi4iHNFa6i1IevAW5bucH3+Lra71shPpgqe2Wy//FN3BeWft5cjDYt+Jcl5nyNNmGbRFc6fowBJ6D14luA98+807dlZ+wJZ+f1icHF17WnSv65MzVcUcyXW7/laXgTXW79lvgzQvZ03AfG/q9efAlwT3llVq8YeaWiq198QFXTH/b+wFUmltXoczraz/i6rrz6kPhzQnZ0XIbupBrxcYPM+RLgIPZ9sR+cmSCXnnVcih5tWuB7fF04nKWfOmoTj2qmsPysH88D3FNeGfjSc/IsGJd1OI4Wycx+E6k8C/70lps83/NNBwez9KLTd4Ex+9WP5wEO8uBVKng1ySE5+9VhFnz1d2sDjS8POqejpZ8bsqPDhxnwBSQ9eR7gJS+8Jh7g2b9+R3xgVbB6pnyAl9XIj8N4Ltz7xcDj67r4jTvEnx8yd5gmiQcWs18zeRpg6eXnRLYvQx8slo+vysvQV159SCzAmAXrR+WrKXHyWV+eBnhXfYN4eLEM7ZB49SiVVybLj0ei4YriwPd+k+HaSv2o+IWkBnqKeykmPjaQG08DrML+LwLsUGH/16XaPvDFb9whGl8exAUdOuqlmFKnoufS84iv5jwNsOTrR8ls/2LStpvlw+vaMl1+PBJJLj+78F6wnlTZD55BO7mLpouPB+TH0wAvb31RPLyuJS+8Jj64koK49zlTj9wmPx6JJE4/Yx/YHIdpkuhMuI7acN+zITwN8LqWZ8XD61re+qL44Ep6olo+vC7VPtBw/YMfiAd47NhW8XGA/Ei8noQ9X7NgCdpQfn52MFuq7QFLH8BySY8D5C+o09EzaCdvopWIr2E8DXD7fSvEw+uy/UpKlQ5hqfadYAQYvNRF03ktNfk668V+r5mMfQ1pV32D+OBK2lcuH17X6xPlxyORF9/7zdf1D34gPg7grS6a7umyNMJrPiMv4qjo6uee8krxwZXUH5YPr0u1izhwCAv81Esxfo4WZ/3e8AzayQ30FG+h+xFeS3h+FaUKJ6FtPwHtUuEqStVOQMcpmM8PpoPXkOzxK/oyv0x1vIXu57XUxA30FC+jjbyWmngTreTnaDF3Ug32dy3keYBV2Ae2/RIOlwr7wKrdghUnNS7iwH3QAODL94CnvfGRWHynvfGR9cvPrv6w7OcIl9Wot/wcJ+cqSsn4jh3biqsoAcCfAEsexsLs959J3gmt4uzX9dl/PYjlZwAQ5UuA40Q8+9fvYPargP6wzF7wshrnny39/Kl8estNYgG+cO8XxZ8fAOT5FuCDU6cFeiK6oquf98+8U3xAVRT0pwmX1TivQUk/dzoSs2DMfgHA5VuA40S85ysLAouv7e/9phPke8GqvfebStCfJRw7tpXPz54q/twAoAZfAxwn/yNc0dXP7fetEB9IHQRxPaVqt16lc+HeLwYWX5x8BoBEvgc4TsT7Z97py3I0Zr7Z82smvKxGn5lvsiBeS8L3fwEgWSABjpOzJ+zlwaz5r3TywanTxAdQRweLvT2YtXqmHnu+NzLatMC3mS/iCwDjCSzArl31DXm9Jzz71+/gVSOPvD4xv/eE3Vmvyqeds3F+9lRP94Sx7AwANxJ4gF276ht4eeuLGS1NV3T185IXXuNd9Q14zcgHr0/M/PvBy2qcf+8rk80Jb7J8T0ePHdvKn/3Xg7hsAwBuSCzAiXbVN/Cu+gZuW7mBW9Y/yetanuW2lRu4/b4VvH/mnYhugPZUOXF9ZbLzHd8t052DVa9PdJaZTY1usvOzp2Yd4rFjW/nKqw/hpDMAZESJAAOo7OI37uDLrd/iq79by1d/t5avf/ADvv7BD/jaHzbylVcf4sut3+Lzs6fycEWx+G8FAH0gwAAAAAIQYAAAAAEIMAAAgAAEGAAAQAACDAAAIAABBgAAEIAAAwAACECAAQAABCDAAAAAAhBgAAAAAQgwAACAAAQYAABAAAIMAAAgAAEGAAAQgAADAAAIQIABAAAEIMAAAAACEGAAAAABCDAAAIAABBgAAEAAAgwAACAAAQYAABCAAAMAAAhAgAEAAAQgwAAAAAIQYAAAAAEIMAAAgAAEGAAAQAACDAAAIAABBgAAEIAAAwAACECAAQAABCDAAAAAAhBgAAAAAQgwAACAgP8PcDaTteS058UAAAAASUVORK5CYII=" id="10"/></item></list></costumes><sounds><list struct="atomic" id="11"></list></sounds><blocks></blocks><variables></variables><scripts><script x="91" y="54"><block s="receiveGo"></block><block s="doSetVar"><l>end</l><l>0</l></block><block s="goToLayer"><l><option>back</option></l></block><block s="clearEffects"></block><block s="gotoXY"><l>0</l><l>0</l></block><block s="doUntil"><block s="reportEquals"><block var="end"/><l>true</l></block><script><block s="changeEffect"><l><option>color</option></l><l>4</l></block><block s="doWait"><l>0.4</l></block><block s="doIf"><block s="reportGreaterThan"><block s="getEffect"><l><option>color</option></l></block><l>299</l></block><script><block s="setEffect"><l><option>color</option></l><l>0</l></block></script></block></script></block></script></scripts></sprite><sprite name="the smart one" idx="1" x="0" y="0" heading="90" scale="1" volume="100" pan="0" rotation="1" draggable="true" costume="0" color="80,80,80,1" pen="tip" id="49"><costumes><list struct="atomic" id="50"></list></costumes><sounds><list struct="atomic" id="51"></list></sounds><blocks></blocks><variables></variables><scripts><script x="10" y="10"><block s="receiveGo"></block><block s="doSetVar"><l>whole date</l><l>0</l></block><block s="doSayFor"><block s="reportJoinWords"><list><block s="reportDate"><l><option>date</option></l></block><l>/</l><block s="reportDate"><l><option>month</option></l></block><l>/</l><block s="reportDate"><l><option>year</option></l></block></list></block><l>2</l></block><block s="doIf"><block s="reportAnd"><block s="reportEquals"><block var="date"/><block s="reportDate"><l><option>date</option></l></block></block><block s="reportAnd"><block s="reportEquals"><block var="month"/><block s="reportDate"><l><option>month</option></l></block></block><block s="reportEquals"><block var="year"/><block s="reportDate"><l><option>year</option></l></block></block></block></block><script><block s="doSayFor"><block s="reportJoinWords"><list><l>HI! today is: </l><block var="reason for a reminder"/></list></block><l>2</l></block></script></block><block s="doAsk"><l>do you want to clear reminders? (y/n)</l></block><block s="doIf"><block s="reportEquals"><block s="getLastAnswer"></block><l>y</l></block><script><block s="doSetVar"><l>date</l><l>0</l></block><block s="doSetVar"><l>month</l><l>0</l></block><block s="doSetVar"><l>year</l><l>0</l></block></script></block><block s="doAsk"><l>do you want to set a reminder? (y/n)</l></block><block s="doIfElse"><block s="reportEquals"><block s="getLastAnswer"></block><l>y</l></block><script><block s="doAsk"><l>date of reminder: (day number)</l></block><block s="doSetVar"><l>date</l><block s="getLastAnswer"></block></block><block s="doAsk"><l>month of reminder (month number)</l></block><block s="doSetVar"><l>month</l><block s="getLastAnswer"></block></block><block s="doAsk"><l>year of reminder (month number)</l></block><block s="doSetVar"><l>year</l><block s="getLastAnswer"></block></block><block s="doAsk"><l>reason for reminder:</l></block><block s="doSetVar"><l>reason for a reminder</l><block s="getLastAnswer"></block></block><block s="doSetVar"><l>whole date</l><block s="reportJoinWords"><list><block var="date"/><l>/</l><block var="month"/><l>/</l><block var="year"/></list></block></block><custom-block s="store key: %s value: %s in browser"><l>date</l><block var="date"/></custom-block><custom-block s="store key: %s value: %s in browser"><l>month</l><block var="month"/></custom-block><custom-block s="store key: %s value: %s in browser"><l>year</l><block var="year"/></custom-block></script><script><block s="doIf"><block s="reportAnd"><block s="reportEquals"><block var="date"/><block s="reportDate"><l><option>date</option></l></block></block><block s="reportAnd"><block s="reportEquals"><block var="month"/><block s="reportDate"><l><option>month</option></l></block></block><block s="reportEquals"><block var="year"/><block s="reportDate"><l><option>year</option></l></block></block></block></block><script><block s="doSayFor"><block s="reportJoinWords"><list><l>HI! today is: </l><block var="reason for a reminder"/></list></block><l>2</l></block></script></block><block s="doSetVar"><l>end</l><l>true</l></block><block s="doSayFor"><l>ok, bye!</l><l>2</l></block></script></block><block s="doStopThis"><l><option>all</option></l></block></script></scripts></sprite><watcher var="date" style="normal" x="10" y="10" color="243,118,29" hidden="true"/><watcher var="month" style="normal" x="10" y="31.000001999999995" color="243,118,29" hidden="true"/><watcher var="year" style="normal" x="10" y="52.00000399999999" color="243,118,29" hidden="true"/><watcher var="whole date" style="normal" x="3" y="10.000005999999985" color="243,118,29"/><watcher var="reason for a reminder" style="normal" x="8" y="42.000005999999985" color="243,118,29"/><watcher var="end" style="normal" x="10" y="73.00000599999998" color="243,118,29" hidden="true"/></sprites></stage><hidden></hidden><headers></headers><code></code><blocks><block-definition s="$flash analyze %&apos;data&apos;" type="reporter" category="lists"><comment x="0" y="0" w="149" collapsed="false">returns a frequency analysis of the argument list, represented as a two-column table, where the first column contains the unique values and the second column their occurrences</comment><header></header><code></code><translations>pt:$flash as frequências dos itens de _&#xD;</translations><inputs><input type="%l"></input></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>list</l></list><l>var dict = new Map(),&#xD;    result = [],&#xD;    data = list.itemsArray(),&#xD;    len = data.length,&#xD;    i;&#xD;for (i = 0; i &lt; len; i += 1) {&#xD;    if (dict.has(data[i])) {&#xD;        dict.set(data[i], dict.get(data[i]) + 1);&#xD;    } else {&#xD;        dict.set(data[i], 1);&#xD;    }&#xD;}&#xD;dict.forEach(function (value, key) {&#xD;    result.push(new List([key, value]));&#xD;});&#xD;return new List(result);</l></block><list><block var="data"/></list></block></block></script></block-definition><block-definition s="$flash group %&apos;data&apos; by %&apos;fn&apos;" type="reporter" category="lists"><header></header><code></code><translations>pt:o agrupamento dos itens de _ de acordo com _&#xD;</translations><inputs><input type="%l"></input><input type="%repRing"></input></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>data</l><l>fn</l><l>proc</l></list><l>return proc.reportAtomicGroup(data, fn);</l></block><list><block var="data"/><block var="fn"/></list></block></block></script></block-definition><block-definition s="$flash sort %&apos;data&apos; by %&apos;fn&apos;" type="reporter" category="lists"><header></header><code></code><translations>pt:uma ordenação de _ com critério _&#xD;</translations><inputs><input type="%l"></input><input type="%predRing"></input></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>data</l><l>fn</l><l>proc</l></list><l>return proc.reportAtomicSort(data, fn);</l></block><list><block var="data"/><block var="fn"/></list></block></block></script></block-definition><block-definition s="histogram of %&apos;data&apos; from: %&apos;floor&apos; to: %&apos;ceiling&apos; interval: %&apos;interval&apos;" type="reporter" category="lists"><header></header><code></code><translations>pt:o histograma de _ entre _ e _ com intervalo _&#xD;</translations><inputs><input type="%l"></input><input type="%n"></input><input type="%n"></input><input type="%n">1</input></inputs><script><block s="doReport"><custom-block s="fill %l key: %repRing from: %n to: %n interval: %repRing with: %repRing"><custom-block s="$flash sort %l by %predRing"><custom-block s="$flash analyze %l"><block var="data"/></custom-block><block s="reifyPredicate"><autolambda><block s="reportLessThan"><block s="reportListItem"><l>1</l><l/></block><block s="reportListItem"><l>1</l><l/></block></block></autolambda><list></list></block></custom-block><block s="reifyReporter"><autolambda><block s="reportListItem"><l>1</l><l/></block></autolambda><list></list></block><block var="floor"/><block var="ceiling"/><block s="reifyReporter"><autolambda><block s="reportSum"><l></l><block var="interval"/></block></autolambda><list></list></block><block s="reifyReporter"><autolambda><block s="reportNewList"><list><l></l><l>0</l></list></block></autolambda><list></list></block></custom-block></block></script></block-definition><block-definition s="histogram of %&apos;data&apos; grouped by: %&apos;key&apos; from: %&apos;floor&apos; to: %&apos;ceiling&apos; interval: %&apos;interval&apos;" type="reporter" category="lists"><header></header><code></code><translations>pt:o histograma de _ agrupado de acordo com _ entre _ e _ com passo _&#xD;</translations><inputs><input type="%l"></input><input type="%repRing"></input><input type="%n"></input><input type="%n"></input><input type="%repRing"></input></inputs><script><block s="doReport"><custom-block s="fill %l key: %repRing from: %n to: %n interval: %repRing with: %repRing"><custom-block s="$flash sort %l by %predRing"><custom-block s="$flash group %l by %repRing"><block var="data"/><block var="key"/></custom-block><block s="reifyPredicate"><autolambda><block s="reportLessThan"><block s="reportListItem"><l>1</l><l/></block><block s="reportListItem"><l>1</l><l/></block></block></autolambda><list></list></block></custom-block><block s="reifyReporter"><autolambda><block s="reportListItem"><l>1</l><l/></block></autolambda><list></list></block><block var="floor"/><block var="ceiling"/><block var="interval"/><block s="reifyReporter"><autolambda><block s="reportNewList"><list><l></l><l>0</l><block s="reportNewList"><list></list></block></list></block></autolambda><list></list></block></custom-block></block></script></block-definition><block-definition s="fill %&apos;data&apos; key: %&apos;key&apos; from: %&apos;floor&apos; to: %&apos;ceiling&apos; interval: %&apos;interval&apos; with: %&apos;generator&apos;" type="reporter" category="lists"><comment x="0" y="0" w="103" collapsed="false">add missing entries to a sorted list. Used for histograms</comment><header></header><code></code><translations>pt:os itens de _ com a chave _ entre _ e _ com passo _ completados por _&#xD;</translations><inputs><input type="%l"></input><input type="%repRing"></input><input type="%n"></input><input type="%n"></input><input type="%repRing"></input><input type="%repRing"></input></inputs><script><block s="doIf"><block s="reportGreaterThan"><block var="floor"/><block var="ceiling"/></block><script><block s="doReport"><block s="reportNewList"><list></list></block></block></script></block><block s="doIf"><block s="reportEquals"><block var="data"/><block s="reportNewList"><list></list></block></block><script><block s="doReport"><block s="reportCONS"><block s="evaluate"><block var="generator"/><list><block var="floor"/></list></block><custom-block s="fill %l key: %repRing from: %n to: %n interval: %repRing with: %repRing"><block var="data"/><block var="key"/><block s="evaluate"><block var="interval"/><list><block var="floor"/></list></block><block var="ceiling"/><block var="interval"/><block var="generator"/></custom-block></block></block></script></block><block s="doIf"><block s="reportLessThan"><block s="evaluate"><block var="key"/><list><block s="reportListItem"><l>1</l><block var="data"/></block></list></block><block var="floor"/></block><script><block s="doReport"><custom-block s="fill %l key: %repRing from: %n to: %n interval: %repRing with: %repRing"><block s="reportCDR"><block var="data"/></block><block var="key"/><block var="floor"/><block var="ceiling"/><block var="interval"/><block var="generator"/></custom-block></block></script></block><block s="doIf"><block s="reportEquals"><block s="evaluate"><block var="key"/><list><block s="reportListItem"><l>1</l><block var="data"/></block></list></block><block var="floor"/></block><script><block s="doReport"><block s="reportCONS"><block s="reportListItem"><l>1</l><block var="data"/></block><custom-block s="fill %l key: %repRing from: %n to: %n interval: %repRing with: %repRing"><block s="reportCDR"><block var="data"/></block><block var="key"/><block s="evaluate"><block var="interval"/><list><block var="floor"/></list></block><block var="ceiling"/><block var="interval"/><block var="generator"/></custom-block></block></block></script></block><block s="doReport"><block s="reportCONS"><block s="evaluate"><block var="generator"/><list><block var="floor"/></list></block><custom-block s="fill %l key: %repRing from: %n to: %n interval: %repRing with: %repRing"><block var="data"/><block var="key"/><block s="evaluate"><block var="interval"/><list><block var="floor"/></list></block><block var="ceiling"/><block var="interval"/><block var="generator"/></custom-block></block></block></script></block-definition><block-definition s="%&apos;text&apos; $arrowRight lower case" type="reporter" category="operators"><header></header><code></code><translations>pt:_ em minúsculas&#xD;</translations><inputs><input type="%s"></input></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>txt</l></list><l>return txt.toLowerCase()</l></block><list><block var="text"/></list></block></block></script></block-definition><block-definition s="plot %&apos;data&apos; %&apos;style&apos; at x: %&apos;left&apos; y: %&apos;bottom&apos; width: %&apos;width&apos; height: %&apos;height&apos;" type="command" category="pen"><header></header><code></code><translations>pt:desenha gráfico de barras de _ em (x: _ , y: _ ) com largura _ e altura _&#xD;</translations><inputs><input type="%l"></input><input type="%s" readonly="true">bars<options>bars&#xD;lines&#xD;pie chart</options></input><input type="%n">-200</input><input type="%n">-100</input><input type="%n">400</input><input type="%n">200</input></inputs><script><block s="doIfElse"><block s="reportEquals"><block var="style"/><l>pie chart</l></block><script><block s="doDeclareVariables"><list><l>x</l><l>y</l><l>r</l><l>total</l><l>start</l><l>end</l><l>state</l><l>pen size</l><l>heading</l></list></block><block s="doSetVar"><l>x</l><block s="reportSum"><block var="left"/><block s="reportQuotient"><block var="width"/><l>2</l></block></block></block><block s="doSetVar"><l>y</l><block s="reportSum"><block var="bottom"/><block s="reportQuotient"><block var="height"/><l>2</l></block></block></block><block s="doSetVar"><l>r</l><block s="reportIfElse"><block s="reportLessThan"><block var="height"/><block var="width"/></block><block s="reportQuotient"><block var="height"/><l>2</l></block><block s="reportQuotient"><block var="width"/><l>2</l></block></block></block><block s="doSetVar"><l>total</l><block s="reportCombine"><block var="data"/><block s="reifyReporter"><autolambda><block s="reportSum"><l></l><l></l></block></autolambda><list></list></block></block></block><block s="doSetVar"><l>state</l><block s="reportMap"><block s="reifyReporter"><autolambda><block s="reportNewList"><list><l></l><block s="getPenAttribute"><l></l></block></list></block></autolambda><list></list></block><block s="reportNewList"><list><l>hue</l><l>saturation</l><l>brightness</l></list></block></block></block><block s="doSetVar"><l>pen size</l><block s="getPenAttribute"><l><option>size</option></l></block></block><block s="doSetVar"><l>heading</l><block s="direction"></block></block><block s="setPenHSVA"><l><option>hue</option></l><l>0</l></block><block s="setPenHSVA"><l><option>brightness</option></l><l>80</l></block><block s="setPenHSVA"><l><option>saturation</option></l><l>80</l></block><block s="doWarp"><script><block s="doForEach"><l>slice</l><block var="data"/><script><block s="doChangeVar"><l>end</l><block s="reportProduct"><block s="reportQuotient"><block var="slice"/><block var="total"/></block><l>360</l></block></block><block s="gotoXY"><block var="x"/><block var="y"/></block><block s="down"></block><block s="doFor"><l>i</l><block var="start"/><block var="end"/><script><block s="gotoXY"><block s="reportSum"><block var="x"/><block s="reportProduct"><block var="r"/><block s="reportMonadic"><l><option>sin</option></l><block var="i"/></block></block></block><block s="reportSum"><block var="y"/><block s="reportProduct"><block var="r"/><block s="reportMonadic"><l><option>cos</option></l><block var="i"/></block></block></block></block></script></block><block s="gotoXY"><block var="x"/><block var="y"/></block><block s="up"></block><block s="setHeading"><block var="start"/></block><block s="turn"><block s="reportQuotient"><block s="reportDifference"><block var="end"/><block var="start"/></block><l>2</l></block></block><block s="forward"><block s="reportQuotient"><block var="r"/><l>2</l></block></block><block s="floodFill"></block><block s="changePenHSVA"><l><option>hue</option></l><block s="reportQuotient"><l>100</l><block s="reportListAttribute"><l><option>length</option></l><block var="data"/></block></block></block><block s="doSetVar"><l>start</l><block var="end"/></block></script></block><block s="doForEach"><l>setting</l><block var="state"/><script><block s="setPenHSVA"><block s="reportListItem"><l>1</l><block var="setting"/></block><block s="reportListItem"><l>2</l><block var="setting"/></block></block></script></block></script></block><block s="setSize"><block var="pen size"/></block><block s="setHeading"><block var="heading"/></block></script><script><block s="doDeclareVariables"><list><l>ratio</l><l>step</l><l>flat line ends</l><l>col</l><l>sorted</l><l>min</l></list></block><block s="doSetVar"><l>sorted</l><custom-block s="$flash sort %l by %predRing"><block var="data"/><block s="reifyPredicate"><autolambda><block s="reportGreaterThan"><l></l><l></l></block></autolambda><list></list></block></custom-block></block><block s="doIfElse"><block s="reportLessThan"><block s="reportListItem"><l><option>last</option></l><block var="sorted"/></block><l>0</l></block><script><block s="doSetVar"><l>min</l><block s="reportListItem"><l><option>last</option></l><block var="sorted"/></block></block></script><script><block s="doSetVar"><l>min</l><l>0</l></block></script></block><block s="doSetVar"><l>ratio</l><block s="reportQuotient"><block var="height"/><block s="reportDifference"><block s="reportListItem"><l>1</l><block var="sorted"/></block><block var="min"/></block></block></block><block s="doSetVar"><l>step</l><block s="reportQuotient"><block var="width"/><block s="reportListAttribute"><l><option>length</option></l><block var="data"/></block></block></block><block s="doIfElse"><block s="reportGreaterThan"><block var="step"/><l>2</l></block><script><block s="doSetVar"><l>col</l><block s="reportDifference"><block var="step"/><l>1</l></block></block></script><script><block s="doSetVar"><l>col</l><block s="reportProduct"><block var="step"/><l>0.8</l></block></block></script></block><block s="gotoXY"><block var="left"/><block var="bottom"/></block><block s="doIfElse"><block s="reportEquals"><block var="style"/><l>lines</l></block><script><block s="changeXPosition"><block s="reportQuotient"><block var="step"/><l>-2</l></block></block><block s="doWarp"><script><block s="doUntil"><block s="reportEquals"><block s="reportListAttribute"><l><option>length</option></l><block var="data"/></block><l>0</l></block><script><block s="gotoXY"><block s="reportSum"><block s="xPosition"></block><block var="step"/></block><block s="reportSum"><block var="bottom"/><block s="reportProduct"><block s="reportDifference"><block s="reportListItem"><l>1</l><block var="data"/></block><block var="min"/></block><block var="ratio"/></block></block></block><block s="down"></block><block s="doSetVar"><l>data</l><block s="reportCDR"><block var="data"/></block></block></script></block></script></block></script><script><block s="doSetVar"><l>flat line ends</l><block s="reportGlobalFlag"><l><option>flat line ends</option></l></block></block><block s="doSetGlobalFlag"><l><option>flat line ends</option></l><l><bool>true</bool></l></block><block s="setSize"><l>0.5</l></block><block s="down"></block><block s="changeXPosition"><block s="reportQuotient"><block var="step"/><l>2</l></block></block><block s="doWarp"><script><block s="doUntil"><block s="reportEquals"><block s="reportListAttribute"><l><option>length</option></l><block var="data"/></block><l>0</l></block><script><block s="setSize"><block var="col"/></block><block s="changeYPosition"><block s="reportProduct"><block s="reportDifference"><block s="reportListItem"><l>1</l><block var="data"/></block><block var="min"/></block><block var="ratio"/></block></block><block s="setYPosition"><block var="bottom"/></block><block s="setSize"><l>0.5</l></block><block s="doSetVar"><l>data</l><block s="reportCDR"><block var="data"/></block></block><block s="doIfElse"><block s="reportGreaterThan"><block s="reportListAttribute"><l><option>length</option></l><block var="data"/></block><l>0</l></block><script><block s="changeXPosition"><block var="step"/></block></script><script><block s="changeXPosition"><block s="reportQuotient"><block var="step"/><l>2</l></block></block></script></block></script></block></script></block><block s="doSetGlobalFlag"><l><option>flat line ends</option></l><block var="flat line ends"/></block></script></block><block s="up"></block></script></block></script></block-definition><block-definition s="store key: %&apos;key&apos; value: %&apos;value&apos; in browser" type="command" category="other"><header></header><code></code><translations></translations><inputs><input type="%s"></input><input type="%s"></input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>key</l><l>value</l><l>proc</l></list><l>proc.assertType(key, [&apos;text&apos;, &apos;number&apos;]);&#xD;proc.assertType(value, [&apos;text&apos;, &apos;number&apos;]);&#xD;window.localStorage.setItem(&apos;-snap-project-&apos; + key, &apos;&apos; + value);</l></block><list><block var="key"/><block var="value"/></list></block></script></block-definition><block-definition s="stored data in browser" type="reporter" category="other"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list></list><l>var str = window.localStorage,&#xD;    len = str.length,&#xD;    result = [],&#xD;    key,&#xD;    i;&#xD;for (i = 0; i &lt; len; i += 1) {&#xD;  key = str.key(i);&#xD;  if (key.startsWith(&apos;-snap-project-&apos;)) {&#xD;    result.push(new List([key.slice(14), str.getItem(key)]));&#xD;  }&#xD;}&#xD;return new List(result);</l></block><list></list></block></block></script></block-definition><block-definition s="remove key: %&apos;key&apos; in browser" 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>key</l><l>proc</l></list><l>proc.assertType(key, [&apos;text&apos;, &apos;number&apos;]);&#xD;window.localStorage.removeItem(&apos;-snap-project-&apos; + key);</l></block><list><block var="key"/></list></block></script></block-definition><block-definition s="clear data in browser" type="command" category="other"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doWarp"><script><block s="doForEach"><l>item</l><custom-block s="stored data in browser"></custom-block><script><custom-block s="remove key: %s in browser"><block s="reportListItem"><l>1</l><block var="item"/></block></custom-block></script></block></script></block></script></block-definition><block-definition s="get value from key: %&apos;key&apos; in browser" type="reporter" category="other"><comment x="0" y="0" w="199.33333333333334" collapsed="false">Reports the value previously stored under&#xD;the input key in the browser&apos;s local storage.&#xD;Reports False if the key is not found.</comment><header></header><code></code><translations></translations><inputs><input type="%s"></input></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>key</l></list><l>var str = window.localStorage,&#xD;    result = str.getItem(&apos;-snap-project-&apos;+key);&#xD;if (!result) {&#xD;   return false;&#xD;}&#xD;return result;</l></block><list><block var="key"/></list></block></block></script></block-definition><block-definition s="all but first letter of %&apos;string&apos;" type="reporter" category="operators"><comment x="0" y="0" w="199" collapsed="false">Takes a text string as input, and reports a new text string containing all but the first character of the input.</comment><header></header><code></code><translations>pt:_ sem o primeiro caractere&#xD;</translations><inputs><input type="%txt"></input></inputs><script><block s="doDeclareVariables"><list><l>result</l><l>i</l></list></block><block s="doIf"><block s="reportIsA"><block var="string"/><l><option>list</option></l></block><script><block s="doReport"><block s="reportMap"><block s="reifyReporter"><autolambda><custom-block s="all but first letter of %txt"><l></l></custom-block></autolambda><list></list></block><block var="string"/></block></block></script></block><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>str</l></list><l>return str.slice(1);</l></block><list><custom-block s="require nonempty %s %s"><block var="string"/><l>All but first of empty word.</l></custom-block></list></block></block></script><scripts><script x="11.333333333333334" y="249.0000000000001"><block s="doWarp"><script><block s="doSetVar"><l>result</l><l></l></block><block s="doSetVar"><l>i</l><l>2</l></block><block s="doUntil"><block s="reportGreaterThan"><block var="i"/><block s="reportStringSize"><block var="string"/></block></block><script><block s="doSetVar"><l>result</l><block s="reportJoinWords"><list><block var="result"/><block s="reportLetter"><block var="i"/><block var="string"/></block></list></block></block><block s="doChangeVar"><l>i</l><l>1</l></block></script></block><block s="doReport"><block var="result"/></block></script></block></script></scripts></block-definition><block-definition s="all but first word of %&apos;sentence&apos;" type="reporter" category="operators"><comment x="0" y="0" w="223.000001" collapsed="false">Takes a text string as input, divides it into words treating one or more spaces as a word separator (only spaces count; punctuation is part of the word) and reports a text string containing all but the first word, with one space between words and no spaces at the beginning or end. (Note: consider using SENTENCE➞LIST and processing the resulting list instead of doing recursion on sentences in text string form.  List operations are faster.)</comment><header></header><code></code><translations>pt:_ sem a primeira palavra&#xD;</translations><inputs><input type="%txt"></input></inputs><script><block s="doIf"><block s="reportIsA"><block var="sentence"/><l><option>list</option></l></block><script><block s="doIfElse"><block s="reportListIsEmpty"><block var="sentence"/></block><script><custom-block s="error %txt"><l>All but first of empty sentence.</l></custom-block></script><script><block s="doReport"><block s="reportCDR"><block var="sentence"/></block></block></script></block></script></block><block s="doReport"><custom-block s="list $arrowRight sentence %l"><block s="reportCDR"><custom-block s="require nonempty %s %s"><custom-block s="sentence $arrowRight list %txt"><block var="sentence"/></custom-block><l>All but first of empty sentence.</l></custom-block></block></custom-block></block></script><scripts><script x="13.333333333333334" y="368.8888888888889"><block s="doDeclareVariables"><list><l>index</l><l>bf</l></list></block><block s="doWarp"><script><block s="doSetVar"><l>bf</l><l></l></block><block s="doSetVar"><l>index</l><l>1</l></block><block s="doUntil"><block s="reportOr"><block s="reportEquals"><block var="index"/><block s="reportStringSize"><block var="sentence"/></block></block><block s="reportNot"><block s="reportEquals"><block s="reportLetter"><block var="index"/><block var="sentence"/></block><l> </l></block></block></block><script><block s="doChangeVar"><l>index</l><l>1</l></block></script></block><block s="doIf"><block s="reportEquals"><block s="reportLetter"><block var="index"/><block var="sentence"/></block><l> </l></block><script><custom-block s="error %txt"><l>All but first of empty sentence.</l></custom-block></script></block><block s="doUntil"><block s="reportOr"><block s="reportEquals"><block var="index"/><block s="reportStringSize"><block var="sentence"/></block></block><block s="reportEquals"><block s="reportLetter"><block var="index"/><block var="sentence"/></block><l> </l></block></block><script><block s="doChangeVar"><l>index</l><l>1</l></block></script></block><block s="doIf"><block s="reportEquals"><block var="index"/><block s="reportStringSize"><block var="sentence"/></block></block><script><block s="doReport"><l></l></block></script></block><block s="doUntil"><block s="reportOr"><block s="reportEquals"><block var="index"/><block s="reportStringSize"><block var="sentence"/></block></block><block s="reportNot"><block s="reportEquals"><block s="reportLetter"><block var="index"/><block var="sentence"/></block><l> </l></block></block></block><script><block s="doChangeVar"><l>index</l><l>1</l></block></script></block><block s="doIf"><block s="reportEquals"><block s="reportLetter"><block var="index"/><block var="sentence"/></block><l> </l></block><script><block s="doReport"><l></l></block></script></block><block s="doUntil"><block s="reportGreaterThan"><block var="index"/><block s="reportStringSize"><block var="sentence"/></block></block><script><block s="doSetVar"><l>bf</l><block s="reportJoinWords"><list><block var="bf"/><block s="reportLetter"><block var="index"/><block var="sentence"/></block></list></block></block><block s="doChangeVar"><l>index</l><l>1</l></block></script></block><block s="doReport"><block var="bf"/></block></script></block></script></scripts></block-definition><block-definition s="all but last letter of %&apos;string&apos;" type="reporter" category="operators"><comment x="0" y="0" w="218" collapsed="false">Takes a text string as input, and reports a new text string containing all but the last letter of the input.</comment><header></header><code></code><translations>pt:_ sem o último caractere&#xD;</translations><inputs><input type="%txt"></input></inputs><script><block s="doDeclareVariables"><list><l>result</l><l>i</l></list></block><block s="doIf"><block s="reportIsA"><block var="string"/><l><option>list</option></l></block><script><block s="doReport"><block s="reportMap"><block s="reifyReporter"><autolambda><custom-block s="all but last letter of %txt"><l></l></custom-block></autolambda><list></list></block><block var="string"/></block></block></script></block><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>str</l></list><l>return str.slice(0,-1);</l></block><list><custom-block s="require nonempty %s %s"><block var="string"/><l>All but last of empty word.</l></custom-block></list></block></block></script><scripts><script x="10" y="264.77777777777777"><block s="doWarp"><script><block s="doSetVar"><l>result</l><l></l></block><block s="doSetVar"><l>i</l><l>1</l></block><block s="doUntil"><block s="reportEquals"><block var="i"/><block s="reportStringSize"><block var="string"/></block></block><script><block s="doSetVar"><l>result</l><block s="reportJoinWords"><list><block var="result"/><block s="reportLetter"><block var="i"/><block var="string"/></block></list></block></block><block s="doChangeVar"><l>i</l><l>1</l></block></script></block><block s="doReport"><block var="result"/></block></script></block></script></scripts></block-definition><block-definition s="all but last word of %&apos;sentence&apos;" type="reporter" category="operators"><comment x="0" y="0" w="211.99999999999997" collapsed="false">Takes a text string as input, divides it into words treating one or more spaces as a word separator (only spaces count; punctuation is part of the word) and reports a text string containing all but the last word, with one space between words and no spaces at the beginning or end.  (Note: consider using SENTENCE-&gt;LIST and processing the resulting list instead of doing recursion on sentences in text string form.  List operations are faster.)</comment><header></header><code></code><translations>pt:_ sem a última palavra&#xD;</translations><inputs><input type="%txt"></input></inputs><script><block s="doIf"><block s="reportIsA"><block var="sentence"/><l><option>list</option></l></block><script><block s="doIfElse"><block s="reportListIsEmpty"><block var="sentence"/></block><script><custom-block s="error %txt"><l>All but last of empty sentence.</l></custom-block></script><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>arr</l></list><l>return new List(arr.itemsArray().slice(0,-1));</l></block><list><block var="sentence"/></list></block></block></script></block></script></block><block s="doReport"><custom-block s="list $arrowRight sentence %l"><block s="evaluate"><block s="reportJSFunction"><list><l>arr</l></list><l>return new List(arr.asArray().slice(0,-1));</l></block><list><custom-block s="require nonempty %s %s"><custom-block s="sentence $arrowRight list %txt"><block var="sentence"/></custom-block><l>All but last of empty sentence.</l></custom-block></list></block></custom-block></block></script><scripts><script x="9.333333333333334" y="384.4444444444446"><block s="doDeclareVariables"><list><l>index</l><l>bl</l></list></block><block s="doWarp"><script><block s="doSetVar"><l>bl</l><l></l></block><block s="doSetVar"><l>index</l><block s="reportStringSize"><block var="sentence"/></block></block><block s="doUntil"><block s="reportOr"><block s="reportEquals"><block var="index"/><l>1</l></block><block s="reportNot"><block s="reportEquals"><block s="reportLetter"><block var="index"/><block var="sentence"/></block><l> </l></block></block></block><script><block s="doChangeVar"><l>index</l><l>-1</l></block></script></block><block s="doIf"><block s="reportEquals"><block s="reportLetter"><block var="index"/><block var="sentence"/></block><l> </l></block><script><custom-block s="error %txt"><l>All but last of empty sentence.</l></custom-block></script></block><block s="doUntil"><block s="reportOr"><block s="reportEquals"><block var="index"/><l>1</l></block><block s="reportEquals"><block s="reportLetter"><block var="index"/><block var="sentence"/></block><l> </l></block></block><script><block s="doChangeVar"><l>index</l><l>-1</l></block></script></block><block s="doIf"><block s="reportEquals"><block var="index"/><l>1</l></block><script><block s="doReport"><l></l></block></script></block><block s="doUntil"><block s="reportOr"><block s="reportEquals"><block var="index"/><l>1</l></block><block s="reportNot"><block s="reportEquals"><block s="reportLetter"><block var="index"/><block var="sentence"/></block><l> </l></block></block></block><script><block s="doChangeVar"><l>index</l><l>-1</l></block></script></block><block s="doIf"><block s="reportEquals"><block s="reportLetter"><block var="index"/><block var="sentence"/></block><l> </l></block><script><block s="doReport"><l></l></block></script></block><block s="doUntil"><block s="reportLessThan"><block var="index"/><l>1</l></block><script><block s="doSetVar"><l>bl</l><block s="reportJoinWords"><list><block s="reportLetter"><block var="index"/><block var="sentence"/></block><block var="bl"/></list></block></block><block s="doChangeVar"><l>index</l><l>-1</l></block></script></block><block s="doReport"><block var="bl"/></block></script></block></script><script x="249" y="393.55555555555566"><block s="reportKeep"><block s="reifyPredicate"><autolambda><block s="reportLessThan"><block var="index"/><block s="reportListAttribute"><l><option>length</option></l><block var="sentence"/></block></block></autolambda><list><l>value</l><l>index</l></list></block><block var="sentence"/></block></script></scripts></block-definition><block-definition s="first word of %&apos;sentence&apos;" type="reporter" category="operators"><comment x="0" y="0" w="236" collapsed="false">Takes a text string as input, divides it into words treating one or more spaces as a word separator (only spaces count; punctuation is part of the word) and reports a text string containing only the first word, with no spaces before or after it.</comment><header></header><code></code><translations>pt:a primeira palavra de _&#xD;</translations><inputs><input type="%txt"></input></inputs><script><block s="doIfElse"><block s="reportIsA"><block var="sentence"/><l><option>list</option></l></block><script><block s="doIfElse"><block s="reportListIsEmpty"><block var="sentence"/></block><script><custom-block s="error %txt"><l>First of empty sentence.</l></custom-block></script><script><block s="doReport"><block s="reportListItem"><l>1</l><block var="sentence"/></block></block></script></block></script><script><block s="doReport"><block s="reportListItem"><l>1</l><custom-block s="require nonempty %s %s"><custom-block s="sentence $arrowRight list %txt"><block var="sentence"/></custom-block><l>First of empty sentence.</l></custom-block></block></block></script></block></script><scripts><script x="9.333333333333334" y="345.5555555555555"><block s="doDeclareVariables"><list><l>index</l><l>first</l></list></block><block s="doWarp"><script><block s="doSetVar"><l>first</l><l></l></block><block s="doSetVar"><l>index</l><l>1</l></block><block s="doIf"><block s="reportEquals"><block s="reportStringSize"><block var="sentence"/></block><l>0</l></block><script><custom-block s="error %txt"><l>First of empty sentence.</l></custom-block></script></block><block s="doUntil"><block s="reportOr"><block s="reportEquals"><block var="index"/><block s="reportStringSize"><block var="sentence"/></block></block><block s="reportNot"><block s="reportEquals"><block s="reportLetter"><block var="index"/><block var="sentence"/></block><l> </l></block></block></block><script><block s="doChangeVar"><l>index</l><l>1</l></block></script></block><block s="doIf"><block s="reportEquals"><block s="reportLetter"><block var="index"/><block var="sentence"/></block><l> </l></block><script><custom-block s="error %txt"><l>First of empty sentence.</l></custom-block></script></block><block s="doUntil"><block s="reportOr"><block s="reportEquals"><block var="index"/><block s="reportStringSize"><block var="sentence"/></block></block><block s="reportEquals"><block s="reportLetter"><block var="index"/><block var="sentence"/></block><l> </l></block></block><script><block s="doSetVar"><l>first</l><block s="reportJoinWords"><list><block var="first"/><block s="reportLetter"><block var="index"/><block var="sentence"/></block></list></block></block><block s="doChangeVar"><l>index</l><l>1</l></block></script></block><block s="doIf"><block s="reportNot"><block s="reportEquals"><block s="reportLetter"><block var="index"/><block var="sentence"/></block><l> </l></block></block><script><block s="doSetVar"><l>first</l><block s="reportJoinWords"><list><block var="first"/><block s="reportLetter"><block var="index"/><block var="sentence"/></block></list></block></block></script></block><block s="doReport"><block var="first"/></block></script></block></script></scripts></block-definition><block-definition s="last letter of %&apos;word&apos;" type="reporter" category="operators"><comment x="0" y="0" w="260" collapsed="false">Takes a text string as input, and reports the last character in the string.</comment><header></header><code></code><translations>pt:o último caractere de _&#xD;</translations><inputs><input type="%txt"></input></inputs><script><block s="doIf"><block s="reportIsA"><block var="word"/><l><option>list</option></l></block><script><block s="doReport"><block s="reportMap"><block s="reifyReporter"><autolambda><custom-block s="last letter of %txt"><l></l></custom-block></autolambda><list></list></block><block var="word"/></block></block></script></block><block s="doIf"><block s="reportEquals"><block s="reportStringSize"><block var="word"/></block><l>0</l></block><script><custom-block s="error %txt"><l>Last of empty word.</l></custom-block></script></block><block s="doReport"><block s="reportLetter"><block s="reportStringSize"><block var="word"/></block><block var="word"/></block></block></script></block-definition><block-definition s="last word of %&apos;sentence&apos;" type="reporter" category="operators"><comment x="0" y="0" w="262" collapsed="false">Takes a text string as input, divides it into words treating one or more spaces as a word separator (only spaces count; punctuation is part of the word) and reports a text string containing only the last word of the input, with no spaces before or after it.</comment><header></header><code></code><translations>pt:a última palavra de _&#xD;</translations><inputs><input type="%txt"></input></inputs><script><block s="doIf"><block s="reportIsA"><block var="sentence"/><l><option>list</option></l></block><script><block s="doIfElse"><block s="reportListIsEmpty"><block var="sentence"/></block><script><custom-block s="error %txt"><l>Last of empty sentence.</l></custom-block></script><script><block s="doReport"><block s="reportListItem"><l><option>last</option></l><block var="sentence"/></block></block></script></block></script></block><block s="doReport"><block s="reportListItem"><l><option>last</option></l><custom-block s="require nonempty %s %s"><custom-block s="sentence $arrowRight list %txt"><block var="sentence"/></custom-block><l>Last of empty sentence.</l></custom-block></block></block></script><scripts><script x="25.333333333333332" y="276.22222222222223"><block s="doDeclareVariables"><list><l>index</l><l>last</l></list></block><block s="doWarp"><script><block s="doSetVar"><l>last</l><l></l></block><block s="doSetVar"><l>index</l><block s="reportStringSize"><block var="sentence"/></block></block><block s="doIf"><block s="reportEquals"><block s="reportStringSize"><block var="sentence"/></block><l>0</l></block><script><custom-block s="error %txt"><l>Last of empty sentence.</l></custom-block></script></block><block s="doUntil"><block s="reportOr"><block s="reportEquals"><block var="index"/><l>1</l></block><block s="reportNot"><block s="reportEquals"><block s="reportLetter"><block var="index"/><block var="sentence"/></block><l> </l></block></block></block><script><block s="doChangeVar"><l>index</l><l>-1</l></block></script></block><block s="doIf"><block s="reportEquals"><block s="reportLetter"><block var="index"/><block var="sentence"/></block><l> </l></block><script><custom-block s="error %txt"><l>Last of empty sentence.</l></custom-block></script></block><block s="doUntil"><block s="reportOr"><block s="reportEquals"><block var="index"/><l>1</l></block><block s="reportEquals"><block s="reportLetter"><block var="index"/><block var="sentence"/></block><l> </l></block></block><script><block s="doSetVar"><l>last</l><block s="reportJoinWords"><list><block s="reportLetter"><block var="index"/><block var="sentence"/></block><block var="last"/></list></block></block><block s="doChangeVar"><l>index</l><l>-1</l></block></script></block><block s="doIf"><block s="reportNot"><block s="reportEquals"><block s="reportLetter"><block var="index"/><block var="sentence"/></block><l> </l></block></block><script><block s="doSetVar"><l>last</l><block s="reportJoinWords"><list><block s="reportLetter"><block var="index"/><block var="sentence"/></block><block var="last"/></list></block></block></script></block><block s="doReport"><block var="last"/></block></script></block></script></scripts></block-definition><block-definition s="empty word? %&apos;word&apos;" type="predicate" category="operators"><comment x="0" y="0" w="208" collapsed="false">Takes a text string as input, and reports TRUE if the string has no characters in it of any kind, otherwise false.</comment><header></header><code></code><translations>pt:a palavra _ está vazia&#xD;</translations><inputs><input type="%txt"></input></inputs><script><block s="doIf"><block s="reportIsA"><block var="word"/><l><option>list</option></l></block><script><block s="doReport"><block s="reportMap"><block s="reifyReporter"><autolambda><custom-block s="empty word? %txt"><l></l></custom-block></autolambda><list></list></block><block var="word"/></block></block></script></block><block s="doReport"><block s="reportEquals"><block s="reportStringSize"><block var="word"/></block><l>0</l></block></block></script></block-definition><block-definition s="empty sentence? %&apos;sentence&apos;" type="predicate" category="operators"><comment x="0" y="0" w="221" collapsed="false">Takes a text string as input, and reports TRUE if the input contains no characters other than spaces (therefore, no words when the string is considered as a sentence), otherwise FALSE.</comment><header></header><code></code><translations>pt:a frase _ está vazia&#xD;</translations><inputs><input type="%txt"></input></inputs><script><block s="doDeclareVariables"><list><l>index</l></list></block><block s="doIf"><block s="reportIsA"><block var="sentence"/><l><option>list</option></l></block><script><block s="doReport"><block s="reportListIsEmpty"><block var="sentence"/></block></block></script></block><block s="doReport"><block s="reportListIsEmpty"><custom-block s="sentence $arrowRight list %txt"><block var="sentence"/></custom-block></block></block></script><scripts><script x="12" y="258"><block s="doSetVar"><l>index</l><l>1</l></block><block s="doIf"><block s="reportEquals"><block s="reportStringSize"><block var="sentence"/></block><l>0</l></block><script><block s="doReport"><block s="reportBoolean"><l><bool>true</bool></l></block></block></script></block><block s="doUntil"><block s="reportOr"><block s="reportEquals"><block var="index"/><block s="reportStringSize"><block var="sentence"/></block></block><block s="reportNot"><block s="reportEquals"><block s="reportLetter"><block var="index"/><block var="sentence"/></block><l> </l></block></block></block><script><block s="doChangeVar"><l>index</l><l>1</l></block></script></block><block s="doReport"><block s="reportEquals"><block s="reportLetter"><block var="index"/><block var="sentence"/></block><l> </l></block></block></script></scripts></block-definition><block-definition s="join words %&apos;words&apos;" type="reporter" category="operators"><comment x="0" y="0" w="230.66666666666666" collapsed="false">Like JOIN, takes any number of words (text strings) and reports a sentence with its inputs concatenated, but inserts a blank space between the inputs.&#xD;Consider using SENTENCE (Lists palette) instead.</comment><header></header><code></code><translations>de:füge Wörter zusammen _&#xD;ca:uneix les paraules _&#xD;es:unir las palabras _&#xD;fr:fusionne les mots _&#xD;pt:uma frase com as palavras _&#xD;</translations><inputs><input type="%mult%txt"></input></inputs><script><block s="doIf"><block s="reportListIsEmpty"><block var="words"/></block><script><block s="doReport"><l></l></block></script></block><block s="doDeclareVariables"><list><l>first</l><l>bf</l></list></block><block s="doSetVar"><l>first</l><block s="reportIfElse"><block s="reportIsA"><block s="reportListItem"><l>1</l><block var="words"/></block><l><option>list</option></l></block><custom-block s="join words %mult%txt"><block s="reportListItem"><l>1</l><block var="words"/></block></custom-block><block s="reportListItem"><l>1</l><block var="words"/></block></block></block><block s="doSetVar"><l>bf</l><custom-block s="join words %mult%txt"><block s="reportCDR"><block var="words"/></block></custom-block></block><block s="doIf"><custom-block s="empty sentence? %txt"><block var="bf"/></custom-block><script><block s="doReport"><block var="first"/></block></script></block><block s="doIf"><custom-block s="empty sentence? %txt"><block var="first"/></custom-block><script><block s="doReport"><block var="bf"/></block></script></block><block s="doReport"><block s="reportJoinWords"><list><block var="first"/><l> </l><block var="bf"/></list></block></block></script><scripts><script x="16.666666666666668" y="409.6666666666668"><block s="doIf"><block s="reportIsA"><block s="reportListItem"><l>1</l><block var="words"/></block><l><option>list</option></l></block><script><block s="doIfElse"><custom-block s="empty sentence? %txt"><block var="first"/></custom-block><script><block s="doReport"><block var="bf"/></block></script><script><block s="doIfElse"><custom-block s="empty sentence? %txt"><block var="bf"/></custom-block><script><block s="doReport"><block var="first"/></block></script><script><block s="doReport"><block s="reportJoinWords"><list><block var="first"/><l> </l><block var="bf"/></list></block></block></script></block></script></block></script></block><block s="doIf"><custom-block s="empty sentence? %txt"><block s="reportListItem"><l>1</l><block var="words"/></block></custom-block><script><block s="doReport"><custom-block s="join words %mult%txt"><block s="reportCDR"><block var="words"/></block></custom-block></block></script></block><block s="doIf"><block s="reportEquals"><l></l><block s="reportListItem"><l>2</l><block var="words"/></block></block><script><block s="doReport"><custom-block s="join words %mult%txt"><block s="reportCONS"><block s="reportListItem"><l>1</l><block var="words"/></block><block s="reportCDR"><block s="reportCDR"><block var="words"/></block></block></block></custom-block></block></script></block><block s="doReport"><block s="reportJoinWords"><list><block s="reportListItem"><l>1</l><block var="words"/></block><l> </l><custom-block s="join words %mult%txt"><block s="reportCDR"><block var="words"/></block></custom-block></list></block></block></script></scripts></block-definition><block-definition s="list $arrowRight sentence %&apos;data&apos;" type="reporter" category="operators"><comment x="0" y="0" w="165.33333333333334" collapsed="false">Takes a sentence in list form and reports the sentence as a text string.</comment><header></header><code></code><translations>de:Liste $arrowRight Satz _&#xD;ca:llista $arrowRight frase _&#xD;es:lista $arrowRight frase _&#xD;fr:liste $arrowRight phrase _&#xD;pt:uma frase com as palavras em _&#xD;</translations><inputs><input type="%l"></input></inputs><script><block s="doReport"><custom-block s="join words %mult%txt"><block var="data"/></custom-block></block></script></block-definition><block-definition s="sentence $arrowRight list %&apos;text&apos;" type="reporter" category="operators"><comment x="0" y="0" w="196" collapsed="false">Takes a sentence in text string form and reports the sentence as a list of its words.</comment><header></header><code></code><translations>de:Satz $arrowRight Liste _&#xD;ca:frase $arrowRight llista _&#xD;es:frase $arrowRight lista _&#xD;fr:phrase $arrowRight liste _&#xD;pt:uma lista com as palavras da frase _&#xD;</translations><inputs><input type="%txt"></input></inputs><script><block s="doReport"><block s="reportKeep"><block s="reifyPredicate"><autolambda><block s="reportNot"><block s="reportEquals"><block s="reportStringSize"><l></l></block><l>0</l></block></block></autolambda><list></list></block><block s="reportTextSplit"><block var="text"/><l><option>word</option></l></block></block></block></script></block-definition><block-definition s="word $arrowRight list %&apos;word&apos;" type="reporter" category="operators"><comment x="0" y="0" w="146.42857142857144" collapsed="false">report a list in which each item is one letter from the input word</comment><header></header><code></code><translations>de:Wort $arrowRight Liste _&#xD;ca:paraula $arrowRight llista _&#xD;es:palabra $arrowRight lista _&#xD;fr:mot $arrowRight liste _&#xD;pt:uma lista com os caracteres da palavra _&#xD;</translations><inputs><input type="%txt"></input></inputs><script><block s="doIf"><block s="reportIsA"><block var="word"/><l><option>list</option></l></block><script><block s="doReport"><block s="reportMap"><block s="reifyReporter"><autolambda><custom-block s="word $arrowRight list %txt"><l></l></custom-block></autolambda><list></list></block><block var="word"/></block></block></script></block><block s="doReport"><block s="reportTextSplit"><block var="word"/><l><option>letter</option></l></block></block></script></block-definition><block-definition s="list $arrowRight word %&apos;list&apos;" type="reporter" category="operators"><comment x="0" y="0" w="158.57142857142858" collapsed="false">join all the items of the input list&#xD;into a single word, and report it</comment><header></header><code></code><translations>de:Liste $arrowRight Wort _&#xD;ca:llista $arrowRight paraula _&#xD;es:lista $arrowRight palabra _&#xD;fr:liste $arrowRight mot _&#xD;pt:uma palavra com os caracteres em _&#xD;</translations><inputs><input type="%l"></input></inputs><script><block s="doIf"><block s="reportListIsEmpty"><block var="list"/></block><script><block s="doReport"><block var="list"/></block></script></block><block s="doIf"><block s="reportEquals"><block s="reportFindFirst"><block s="reifyPredicate"><autolambda><block s="reportIsA"><l></l><l><option>list</option></l></block></autolambda><list></list></block><block var="list"/></block><l></l></block><script><block s="doReport"><block s="reportJoinWords"><block var="list"/></block></block></script></block><block s="doReport"><block s="reportMap"><block s="reifyReporter"><autolambda><block s="reportIfElse"><block s="reportIsA"><l></l><l><option>list</option></l></block><block s="reportNewList"><list><custom-block s="list $arrowRight word %l"><l/></custom-block></list></block><l></l></block></autolambda><list></list></block><block var="list"/></block></block></script></block-definition><block-definition s="sentence %&apos;phrase&apos;" type="reporter" category="lists"><comment x="0" y="0" w="302.6666666666667" collapsed="false">SENTENCE is the main constructor for sentences, represented&#xD;as lists of words.  It takes zero or more inputs, each of which can&#xD;be either a list or a text string.  If a list, the input is assumed to be&#xD;a list of words.  If a text string, it is converted to a list of words using&#xD;SENTENCE→LIST.  Then all the lists of words are appended to form a new list of words.&#xD;&#xD;If the inputs are lists of lists rather than lists of words, SENTENCE,&#xD;like APPEND, does only one level of flattening, reporting a list of&#xD;all the items of all the input lists.</comment><header></header><code></code><translations></translations><inputs><input type="%mult%s"></input></inputs><script><block s="doReport"><block s="reportConcatenatedLists"><block s="reportMap"><block s="reifyReporter"><autolambda><block s="reportIfElse"><block s="reportIsA"><l></l><l><option>list</option></l></block><l></l><custom-block s="sentence $arrowRight list %txt"><l></l></custom-block></block></autolambda><list></list></block><block var="phrase"/></block></block></block></script></block-definition><block-definition s="error %&apos;msg&apos;" type="command" category="control"><header></header><code></code><translations>pt:lança o erro _&#xD;</translations><inputs><input type="%txt"></input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>msg</l></list><l>throw new Error(msg);</l></block><list><block var="msg"/></list></block></script></block-definition><block-definition s="printable %&apos;data&apos;" type="reporter" category="lists"><comment x="0" y="0" w="188.66666666666666" collapsed="false">Takes a (possibly deep) list as input,&#xD;and reports a human-readable text form &#xD;of the list (namely, Lisp notation).</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="require nonempty %&apos;text&apos; %&apos;message&apos;" type="reporter" category="operators"><comment x="0" y="0" w="220" collapsed="false">Helper function for word/sentence library.&#xD;Reports its first input, unless that input is empty, in which case it gives its second input as an error message.</comment><header></header><code></code><translations></translations><inputs><input type="%s"></input><input type="%s"></input></inputs><script><block s="doIfElse"><block s="reportIfElse"><block s="reportIsA"><block var="text"/><l><option>list</option></l></block><block s="reportListIsEmpty"><block var="text"/></block><block s="reportEquals"><block s="reportStringSize"><block var="text"/></block><l>0</l></block></block><script><custom-block s="error %txt"><block var="message"/></custom-block></script><script><block s="doReport"><block var="text"/></block></script></block></script></block-definition><block-definition s="first letter of %&apos;word&apos;" type="reporter" category="operators"><comment x="0" y="0" w="260" collapsed="false">Takes a text string as input, and reports the first character in the string.</comment><header></header><code></code><translations>pt:a primeira palavra de _&#xD;</translations><inputs><input type="%txt"></input></inputs><script><block s="doIfElse"><block s="reportIsA"><block var="word"/><l><option>list</option></l></block><script><block s="doReport"><block s="reportMap"><block s="reifyReporter"><autolambda><custom-block s="first letter of %txt"><l></l></custom-block></autolambda><list></list></block><block var="word"/></block></block></script><script><block s="doReport"><block s="reportLetter"><l>1</l><custom-block s="require nonempty %s %s"><block var="word"/><l>First of empty word.</l></custom-block></block></block></script></block></script><scripts><script x="14.666666666666666" y="232.8888888888888"><block s="doDeclareVariables"><list><l>index</l><l>first</l></list></block><block s="doWarp"><script><block s="doSetVar"><l>first</l><l></l></block><block s="doSetVar"><l>index</l><l>1</l></block><block s="doIf"><block s="reportEquals"><block s="reportStringSize"><block var="sentence"/></block><l>0</l></block><script><custom-block s="error %txt"><l>First of empty sentence.</l></custom-block></script></block><block s="doUntil"><block s="reportOr"><block s="reportEquals"><block var="index"/><block s="reportStringSize"><block var="sentence"/></block></block><block s="reportNot"><block s="reportEquals"><block s="reportLetter"><block var="index"/><block var="sentence"/></block><l> </l></block></block></block><script><block s="doChangeVar"><l>index</l><l>1</l></block></script></block><block s="doIf"><block s="reportEquals"><block s="reportLetter"><block var="index"/><block var="sentence"/></block><l> </l></block><script><custom-block s="error %txt"><l>First of empty sentence.</l></custom-block></script></block><block s="doUntil"><block s="reportOr"><block s="reportEquals"><block var="index"/><block s="reportStringSize"><block var="sentence"/></block></block><block s="reportEquals"><block s="reportLetter"><block var="index"/><block var="sentence"/></block><l> </l></block></block><script><block s="doSetVar"><l>first</l><block s="reportJoinWords"><list><block var="first"/><block s="reportLetter"><block var="index"/><block var="sentence"/></block></list></block></block><block s="doChangeVar"><l>index</l><l>1</l></block></script></block><block s="doIf"><block s="reportNot"><block s="reportEquals"><block s="reportLetter"><block var="index"/><block var="sentence"/></block><l> </l></block></block><script><block s="doSetVar"><l>first</l><block s="reportJoinWords"><list><block var="first"/><block s="reportLetter"><block var="index"/><block var="sentence"/></block></list></block></block></script></block><block s="doReport"><block var="first"/></block></script></block></script></scripts></block-definition><block-definition s="bar chart of table %&apos;data&apos; grouped by field: %&apos;field&apos; from: %&apos;floor&apos; to: %&apos;ceiling&apos; interval: %&apos;interval&apos;" type="reporter" category="lists"><comment x="0" y="0" w="344.6666666666667" collapsed="false">Takes a table (typically from a CSV data set) as input and reports a summary of the table grouped by the field in the specified column number.  The remaining three inputs are used only if the field values are numbers, in which case they can be grouped into buckets (e.g., decades, centuries, etc.).  Those three inputs specify the smallest and largest values of interest and, most importantly, the width of a bucket (10 for decades, 100 for centuries).  If the field isn&apos;t numeric, leave these three inputs empty or set them to zero.  In that case, each string value of the field is its own bucket, and they appear sorted alphabetically.&#xD;&#xD;The block reports a new table with three columns.  The first column contains the bucket name or smallest number.  The second column contains a nonnegative integer that says how many records in the input table fall into this bucket.  The third column is a subtable containing the actual records from the original table that fall into the bucket.&#xD;&#xD;If your buckets aren&apos;t of constant width, or you want to group by some function of more than one field, load the &quot;Frequency Distribution Analysis&quot; library instead. </comment><header></header><code></code><translations></translations><inputs><input type="%l"></input><input type="%n"></input><input type="%n"></input><input type="%n"></input><input type="%n"></input></inputs><script><block s="doDeclareVariables"><list><l>sorted</l></list></block><block s="doSetVar"><l>sorted</l><custom-block s="sort table %l on field %n in %s order"><custom-block s="group table %l by field %n by intervals of: %n"><block var="data"/><block var="field"/><block var="interval"/></custom-block><l>1</l><l>ascending</l></custom-block></block><block s="doIf"><block s="reportEquals"><block var="interval"/><l>0</l></block><script><block s="doReport"><block var="sorted"/></block></script></block><block s="doReport"><block s="reportMap"><block s="reifyReporter"><autolambda><block s="reportCONS"><block s="reportProduct"><block s="reportListItem"><l>1</l><l/></block><block var="interval"/></block><block s="reportCDR"><l/></block></block></autolambda><list></list></block><custom-block s="bar chart helper function to fill %l key: %repRing from: %n to: %n interval: %repRing with: %repRing"><block var="sorted"/><block s="reifyReporter"><autolambda><block s="reportListItem"><l>1</l><l/></block></autolambda><list></list></block><block s="reportMonadic"><l><option>ceiling</option></l><block s="reportQuotient"><block var="floor"/><block var="interval"/></block></block><block s="reportMonadic"><l><option>ceiling</option></l><block s="reportQuotient"><block var="ceiling"/><block var="interval"/></block></block><block s="reifyReporter"><autolambda><block s="reportSum"><l></l><l>1</l></block></autolambda><list></list></block><block s="reifyReporter"><autolambda><block s="reportNewList"><list><l></l><l>0</l><block s="reportNewList"><list></list></block></list></block></autolambda><list></list></block></custom-block></block></block></script></block-definition><block-definition s="bar chart helper function to fill %&apos;data&apos; key: %&apos;key&apos; from: %&apos;floor&apos; to: %&apos;ceiling&apos; interval: %&apos;interval&apos; with: %&apos;generator&apos;" type="reporter" category="lists"><comment x="0" y="0" w="103" collapsed="false">add missing entries to a sorted list. Used for histograms</comment><header></header><code></code><translations>pt:os itens de _ com a chave _ entre _ e _ com passo _ completados por _&#xD;</translations><inputs><input type="%l"></input><input type="%repRing"></input><input type="%n"></input><input type="%n"></input><input type="%repRing"></input><input type="%repRing"></input></inputs><script><block s="doIf"><block s="reportGreaterThan"><block var="floor"/><block var="ceiling"/></block><script><block s="doReport"><block s="reportNewList"><list></list></block></block></script></block><block s="doIf"><block s="reportEquals"><block var="data"/><block s="reportNewList"><list></list></block></block><script><block s="doReport"><block s="reportCONS"><block s="evaluate"><block var="generator"/><list><block var="floor"/></list></block><custom-block s="bar chart helper function to fill %l key: %repRing from: %n to: %n interval: %repRing with: %repRing"><block var="data"/><block var="key"/><block s="evaluate"><block var="interval"/><list><block var="floor"/></list></block><block var="ceiling"/><block var="interval"/><block var="generator"/></custom-block></block></block></script></block><block s="doIf"><block s="reportLessThan"><block s="evaluate"><block var="key"/><list><block s="reportListItem"><l>1</l><block var="data"/></block></list></block><block var="floor"/></block><script><block s="doReport"><custom-block s="bar chart helper function to fill %l key: %repRing from: %n to: %n interval: %repRing with: %repRing"><block s="reportCDR"><block var="data"/></block><block var="key"/><block var="floor"/><block var="ceiling"/><block var="interval"/><block var="generator"/></custom-block></block></script></block><block s="doIf"><block s="reportEquals"><block s="evaluate"><block var="key"/><list><block s="reportListItem"><l>1</l><block var="data"/></block></list></block><block var="floor"/></block><script><block s="doReport"><block s="reportCONS"><block s="reportListItem"><l>1</l><block var="data"/></block><custom-block s="bar chart helper function to fill %l key: %repRing from: %n to: %n interval: %repRing with: %repRing"><block s="reportCDR"><block var="data"/></block><block var="key"/><block s="evaluate"><block var="interval"/><list><block var="floor"/></list></block><block var="ceiling"/><block var="interval"/><block var="generator"/></custom-block></block></block></script></block><block s="doReport"><block s="reportCONS"><block s="evaluate"><block var="generator"/><list><block var="floor"/></list></block><custom-block s="bar chart helper function to fill %l key: %repRing from: %n to: %n interval: %repRing with: %repRing"><block var="data"/><block var="key"/><block s="evaluate"><block var="interval"/><list><block var="floor"/></list></block><block var="ceiling"/><block var="interval"/><block var="generator"/></custom-block></block></block></script></block-definition><block-definition s="pipe %&apos;value&apos; $arrowRight %&apos;pipe&apos;" type="reporter" category="control"><header></header><code></code><translations>pt:a aplicação a _ de _&#xD;</translations><inputs><input type="%s"></input><input type="%mult%repRing"></input></inputs><script><block s="doIf"><block s="reportListIsEmpty"><block var="pipe"/></block><script><block s="doReport"><block var="value"/></block></script></block><block s="doReport"><custom-block s="pipe %s $arrowRight %mult%repRing"><block s="evaluate"><block s="reportListItem"><l>1</l><block var="pipe"/></block><list><block var="value"/></list></block><block s="reportCDR"><block var="pipe"/></block></custom-block></block></script></block-definition><block-definition s="plot bar chart %&apos;data&apos; bars at x: %&apos;left&apos; y: %&apos;bottom&apos; width: %&apos;width&apos; height: %&apos;height&apos;" type="command" category="pen"><header></header><code></code><translations>pt:desenha gráfico de barras de _ em (x: _ , y: _ ) com largura _ e altura _&#xD;</translations><inputs><input type="%l"></input><input type="%n">-200</input><input type="%n">-100</input><input type="%n">400</input><input type="%n">200</input></inputs><script><block s="doDeclareVariables"><list><l>ratio</l><l>step</l><l>flat line ends</l><l>col</l><l>sorted</l><l>min</l><l>digit12</l><l>saved pentrails</l><l>digit10</l><l>x label width</l><l>saved position</l><l>label delta y</l><l>max y</l></list></block><block s="doSetVar"><l>flat line ends</l><block s="reportGlobalFlag"><l><option>flat line ends</option></l></block></block><block s="doSetGlobalFlag"><l><option>flat line ends</option></l><l><bool>true</bool></l></block><block s="doSetVar"><l>saved pentrails</l><block s="reportPenTrailsAsCostume"></block></block><block s="clear"></block><block s="up"><comment w="105.33333333333333" collapsed="false">find out how wide a digit is at two sizes</comment></block><block s="doGotoObject"><l><option>center</option></l></block><block s="write"><l>1234567890</l><l>12</l></block><block s="doSetVar"><l>digit12</l><block s="reportQuotient"><block s="xPosition"></block><l>10</l></block></block><block s="clear"></block><block s="up"></block><block s="doGotoObject"><l><option>center</option></l></block><block s="write"><l>1234567890</l><l>10</l></block><block s="doSetVar"><l>digit10</l><block s="reportQuotient"><block s="xPosition"></block><l>10</l></block></block><block s="clear"></block><block s="doSwitchToCostume"><block var="saved pentrails"/></block><block s="doStamp"></block><block s="doSwitchToCostume"><l><option>Turtle</option></l></block><block s="doSetVar"><l>x label width</l><block s="reportMonadic"><l><option>ceiling</option></l><block s="reportMonadic"><l><option>log</option></l><block s="reportListItem"><l>1</l><block s="reportListItem"><l><option>last</option></l><block var="data"/></block></block></block></block></block><block s="doSetVar"><l>sorted</l><block s="reportMap"><block s="reifyReporter"><autolambda><block s="reportListItem"><l>2</l><l/></block></autolambda><list></list></block><custom-block s="sort table %l on field %n in %s order"><block var="data"/><l>2</l><l>descending</l></custom-block></block></block><block s="doIfElse"><block s="reportLessThan"><block s="reportListItem"><l><option>last</option></l><block var="sorted"/></block><l>0</l></block><script><block s="doSetVar"><l>min</l><block s="reportListItem"><l><option>last</option></l><block var="sorted"/></block></block></script><script><block s="doSetVar"><l>min</l><l>0</l></block></script><comment w="142" collapsed="false">If smallest value &lt; 0, the x axis isn&apos;t at the bottom.&#xD;Note that sort is by &gt; not by &lt;.&#xD;Not clear this can happen in a&#xD;histogram!</comment></block><block s="doSetVar"><l>max y</l><block s="reportListItem"><l>1</l><block var="sorted"/></block></block><block s="doSetVar"><l>ratio</l><block s="reportQuotient"><block var="height"/><block s="reportDifference"><block s="reportListItem"><l>1</l><block var="sorted"/></block><block var="min"/></block></block></block><block s="doSetVar"><l>label delta y</l><block s="reportProduct"><block s="reportRound"><block s="reportQuotient"><block var="max y"/><l>50</l></block></block><l>10</l></block></block><block s="doSetVar"><l>step</l><block s="reportQuotient"><block var="width"/><block s="reportListAttribute"><l><option>length</option></l><block var="data"/></block></block></block><block s="doIfElse"><block s="reportGreaterThan"><block var="step"/><l>2</l></block><script><block s="doSetVar"><l>col</l><block s="reportDifference"><block var="step"/><l>1</l></block></block></script><script><block s="doSetVar"><l>col</l><block s="reportProduct"><block var="step"/><l>0.8</l></block></block></script></block><block s="gotoXY"><block var="left"/><block s="reportDifference"><block var="bottom"/><block s="reportProduct"><block var="min"/><block var="ratio"/></block></block></block><block s="setSize"><l>1</l></block><block s="down"></block><block s="setHeading"><l>90</l></block><block s="forward"><block var="width"/><comment w="110.66666666666667" collapsed="true">draw x axis at y=0</comment></block><block s="up"></block><block s="gotoXY"><block var="left"/><block var="bottom"/></block><block s="setHeading"><l>0</l></block><block s="down"></block><block s="forward"><block var="height"/><comment w="74.66666666666667" collapsed="true">draw y axis</comment></block><block s="up"></block><block s="setHeading"><l>90</l></block><block s="gotoXY"><block s="reportDifference"><block var="left"/><block s="reportSum"><block var="digit12"/><l>2</l></block></block><block s="reportDifference"><block var="bottom"/><block s="reportProduct"><block var="min"/><block var="ratio"/></block></block></block><block s="write"><l>0</l><l>12</l></block><block s="doFor"><l>i</l><l>1</l><l>5</l><script><block s="changeYPosition"><block s="reportProduct"><block s="reportDifference"><block var="label delta y"/><block var="min"/></block><block var="ratio"/></block></block><block s="setXPosition"><block s="reportDifference"><block var="left"/><block s="reportSum"><block s="reportProduct"><block var="digit12"/><block s="reportStringSize"><block s="reportProduct"><block var="label delta y"/><block var="i"/></block></block></block><l>2</l></block></block></block><block s="write"><block s="reportProduct"><block var="label delta y"/><block var="i"/></block><l>12</l></block></script></block><block s="gotoXY"><block var="left"/><block var="bottom"/><comment w="112" collapsed="true">Ready to draw bars.</comment></block><block s="changeXPosition"><block s="reportQuotient"><block var="step"/><l>2</l></block></block><block s="setSize"><block var="col"/></block><block s="doWarp"><script><block s="doUntil"><block s="reportEquals"><block s="reportListAttribute"><l><option>length</option></l><block var="data"/></block><l>0</l></block><script><block s="down"></block><block s="changeYPosition"><block s="reportProduct"><block s="reportDifference"><block s="reportListItem"><l>2</l><block s="reportListItem"><l>1</l><block var="data"/></block></block><block var="min"/></block><block var="ratio"/></block></block><block s="up"></block><block s="setYPosition"><block var="bottom"/></block><block s="doSetVar"><l>saved position</l><block s="reportNewList"><list><block s="xPosition"></block><block s="yPosition"></block></list></block></block><block s="doIfElse"><block s="reportLessThan"><block var="col"/><l>15</l><comment w="319.3333333333333" collapsed="true">Choose label format depending on label width vs. bar width.</comment></block><script><block s="setYPosition"><block s="reportDifference"><block var="bottom"/><l>2</l></block></block><block s="changeXPosition"><block s="reportDifference"><block s="reportQuotient"><block var="step"/><l>2</l></block><l>8</l></block></block><block s="setHeading"><l>180</l></block><block s="write"><block s="reportListItem"><l>1</l><block s="reportListItem"><l>1</l><block var="data"/></block></block><l>10</l></block></script><script><block s="doIfElse"><block s="reportLessThan"><block var="col"/><block s="reportProduct"><block s="reportProduct"><block var="digit10"/><block var="x label width"/></block><l>2.5</l></block></block><script><block s="setYPosition"><block s="reportDifference"><block var="bottom"/><l>2</l></block></block><block s="changeXPosition"><block s="reportDifference"><block s="reportQuotient"><block var="step"/><l>2</l></block><l>10</l></block></block><block s="setHeading"><l>180</l></block><block s="write"><block s="reportListItem"><l>1</l><block s="reportListItem"><l>1</l><block var="data"/></block></block><l>12</l></block></script><script><block s="doIfElse"><block s="reportLessThan"><block var="col"/><block s="reportProduct"><block s="reportProduct"><block var="digit12"/><block var="x label width"/></block><l>2.5</l></block></block><script><block s="setYPosition"><block s="reportDifference"><block var="bottom"/><l>10</l></block></block><block s="setHeading"><l>90</l></block><block s="forward"><block s="reportDifference"><block s="reportDifference"><block s="reportQuotient"><block var="step"/><l>2</l></block><block s="reportProduct"><block var="digit10"/><block s="reportMonadic"><l><option>ceiling</option></l><block s="reportMonadic"><l><option>log</option></l><block s="reportListItem"><l>1</l><block s="reportListItem"><l>1</l><block var="data"/></block></block></block></block></block></block><l>2</l></block></block><block s="write"><block s="reportListItem"><l>1</l><block s="reportListItem"><l>1</l><block var="data"/></block></block><l>10</l></block></script><script><block s="setYPosition"><block s="reportDifference"><block var="bottom"/><l>12</l></block></block><block s="setHeading"><l>90</l></block><block s="forward"><block s="reportDifference"><block s="reportDifference"><block s="reportQuotient"><block var="step"/><l>2</l></block><block s="reportProduct"><block var="digit12"/><block s="reportMonadic"><l><option>ceiling</option></l><block s="reportMonadic"><l><option>log</option></l><block s="reportListItem"><l>1</l><block s="reportListItem"><l>1</l><block var="data"/></block></block></block></block></block></block><l>2</l></block></block><block s="write"><block s="reportListItem"><l>1</l><block s="reportListItem"><l>1</l><block var="data"/></block></block><l>12</l></block></script></block></script></block></script></block><block s="doSetVar"><l>data</l><block s="reportCDR"><block var="data"/></block></block><block s="setHeading"><l>90</l></block><block s="doGotoObject"><block var="saved position"/></block><block s="changeXPosition"><block var="step"/></block></script></block></script></block><block s="doSetGlobalFlag"><l><option>flat line ends</option></l><block var="flat line ends"/></block></script></block-definition><block-definition s="sort table %&apos;data&apos; on field %&apos;field number&apos; in %&apos;order&apos; order" type="reporter" category="lists"><header></header><code></code><translations></translations><inputs><input type="%l"></input><input type="%n"></input><input type="%s" readonly="true"><options>ascending&#xD;descending</options></input></inputs><script><block s="doIfElse"><block s="reportEquals"><block var="order"/><l>ascending</l></block><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>data</l><l>fn</l><l>proc</l></list><l>return proc.reportAtomicSort(data, fn);</l></block><list><block var="data"/><block s="reifyPredicate"><autolambda><block s="reportLessThan"><block s="reportListItem"><block var="field number"/><l/></block><block s="reportListItem"><block var="field number"/><l/></block></block></autolambda><list></list></block></list></block></block></script><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>data</l><l>fn</l><l>proc</l></list><l>return proc.reportAtomicSort(data, fn);</l></block><list><block var="data"/><block s="reifyPredicate"><autolambda><block s="reportGreaterThan"><block s="reportListItem"><block var="field number"/><l/></block><block s="reportListItem"><block var="field number"/><l/></block></block></autolambda><list></list></block></list></block></block></script></block></script></block-definition><block-definition s="group table %&apos;data&apos; by field %&apos;number&apos; by intervals of: %&apos;interval&apos;" type="reporter" category="lists"><header></header><code></code><translations></translations><inputs><input type="%l"></input><input type="%n"></input><input type="%n"></input></inputs><script><block s="doIf"><block s="reportEquals"><block var="interval"/><l>0</l></block><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>data</l><l>fn</l><l>proc</l></list><l>return proc.reportAtomicGroup(data, fn);</l></block><list><block var="data"/><block s="reifyReporter"><autolambda><block s="reportListItem"><block var="number"/><l/></block></autolambda><list></list></block></list></block></block></script></block><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>data</l><l>fn</l><l>proc</l></list><l>return proc.reportAtomicGroup(data, fn);</l></block><list><block var="data"/><block s="reifyReporter"><autolambda><block s="reportMonadic"><l><option>ceiling</option></l><block s="reportQuotient"><block s="reportListItem"><block var="number"/><l/></block><block var="interval"/></block></block></autolambda><list></list></block></list></block></block></script></block-definition><block-definition s="%&apos;head&apos; in front of stream %&apos;tail&apos;" type="reporter" category="lists"><comment x="0" y="0" w="418.6106770833333" collapsed="false">The stream version of IN FRONT OF.&#xD;&#xD;Streams, also called lazy lists, are like lists except that&#xD;items are not computed until they&apos;re needed.  This allows&#xD;for more efficient handling of large computed lists, and&#xD;even infinite lists.  The only piece of magic is here in &#xD;IN FRONT OF STREAM, whose second input is of type &#xD;Unevaluated, which means that it&apos;s a procedure, with &#xD;a sort of invisible gray ring. So HEAD OF STREAM is just &#xD;ITEM 1 OF, but TAIL OF STREAM has a CALL block &#xD;to make the computation happen.&#xD;&#xD;For a tutorial introduction to streams, read SICP 3.5:&#xD;https://mitpress.mit.edu/sites/default/files/sicp/full-text/book/book-Z-H-24.html#%_sec_3.5&#xD;or Brian&apos;s lecture notes (start on page 74):&#xD;https://people.eecs.berkeley.edu/&#126;bh/61a-pages/Volume2/notes.pdf&#xD;The above are clickable links!</comment><header></header><code></code><translations>pt:a prefixação de _ ao canal _&#xD;</translations><inputs><input type="%s"></input><input type="%anyUE"></input></inputs><script><block s="doReport"><block s="reportNewList"><list><block var="head"/><block var="tail"/><block s="reportBoolean"><l><bool>false</bool></l></block><block s="reportBoolean"><l><bool>false</bool></l></block></list></block></block></script></block-definition><block-definition s="head of stream %&apos;stream&apos;" type="reporter" category="lists"><comment x="0" y="0" w="418.6106770833333" collapsed="false">The stream version of ITEM 1 OF.&#xD;&#xD;Streams, also called lazy lists, are like lists except that&#xD;items are not computed until they&apos;re needed.  This allows&#xD;for more efficient handling of large computed lists, and&#xD;even infinite lists.  The only piece of magic is in &#xD;IN FRONT OF STREAM, whose second input is of type &#xD;Unevaluated, which means that it&apos;s a procedure, with &#xD;a sort of invisible gray ring. So HEAD OF STREAM is just &#xD;ITEM 1 OF, but TAIL OF STREAM has a CALL block &#xD;to make the computation happen.&#xD;&#xD;For a tutorial introduction to streams, read SICP 3.5:&#xD;https://mitpress.mit.edu/sites/default/files/sicp/full-text/book/book-Z-H-24.html#%_sec_3.5&#xD;or Brian&apos;s lecture notes (start on page 74):&#xD;https://people.eecs.berkeley.edu/&#126;bh/61a-pages/Volume2/notes.pdf&#xD;The above are clickable links!</comment><header></header><code></code><translations>pt:o primeiro item do canal _&#xD;</translations><inputs><input type="%l"></input></inputs><script><block s="doReport"><block s="reportListItem"><l>1</l><block var="stream"/></block></block></script></block-definition><block-definition s="tail of stream %&apos;stream&apos;" type="reporter" category="lists"><comment x="0" y="0" w="418.6106770833333" collapsed="false">The stream version of ALL BUT FIRST OF.&#xD;&#xD;Streams, also called lazy lists, are like lists except that&#xD;items are not computed until they&apos;re needed.  This allows&#xD;for more efficient handling of large computed lists, and&#xD;even infinite lists.  The only piece of magic is in &#xD;IN FRONT OF STREAM, whose second input is of type &#xD;Unevaluated, which means that it&apos;s a procedure, with &#xD;a sort of invisible gray ring. So HEAD OF STREAM is just &#xD;ITEM 1 OF, but TAIL OF STREAM has a CALL block &#xD;to make the computation happen.&#xD;&#xD;For a tutorial introduction to streams, read SICP 3.5:&#xD;https://mitpress.mit.edu/sites/default/files/sicp/full-text/book/book-Z-H-24.html#%_sec_3.5&#xD;or Brian&apos;s lecture notes (start on page 74):&#xD;https://people.eecs.berkeley.edu/&#126;bh/61a-pages/Volume2/notes.pdf&#xD;The above are clickable links!</comment><header></header><code></code><translations>pt:um canal com todos os itens de _ menos o primeiro&#xD;</translations><inputs><input type="%l"></input></inputs><script><block s="doWarp"><script><block s="doIf"><block s="reportListItem"><l>3</l><block var="stream"/></block><script><block s="doReport"><block s="reportListItem"><l>4</l><block var="stream"/></block></block></script></block><block s="doReplaceInList"><l>4</l><block var="stream"/><block s="evaluate"><block s="reportListItem"><l>2</l><block var="stream"/></block><list></list></block></block><block s="doReplaceInList"><l>3</l><block var="stream"/><block s="reportBoolean"><l><bool>true</bool></l></block></block><block s="doReport"><block s="reportListItem"><l>4</l><block var="stream"/></block></block></script></block></script></block-definition><block-definition s="map %&apos;function&apos; over stream %&apos;stream&apos;" type="reporter" category="lists"><comment x="0" y="0" w="418.6106770833333" collapsed="false">The stream version of variadic MAP (any number of input lists, like&#xD;MULTIMAP in the list utilities library).&#xD;&#xD;Streams, also called lazy lists, are like lists except that&#xD;items are not computed until they&apos;re needed.  This allows&#xD;for more efficient handling of large computed lists, and&#xD;even infinite lists.  The only piece of magic is in &#xD;IN FRONT OF STREAM, whose second input is of type &#xD;Unevaluated, which means that it&apos;s a procedure, with &#xD;a sort of invisible gray ring. So HEAD OF STREAM is just &#xD;ITEM 1 OF, but TAIL OF STREAM has a CALL block &#xD;to make the computation happen.&#xD;&#xD;For a tutorial introduction to streams, read SICP 3.5:&#xD;https://mitpress.mit.edu/sites/default/files/sicp/full-text/book/book-Z-H-24.html#%_sec_3.5&#xD;or Brian&apos;s lecture notes (start on page 74):&#xD;https://people.eecs.berkeley.edu/&#126;bh/61a-pages/Volume2/notes.pdf&#xD;The above are clickable links!</comment><header></header><code></code><translations>pt:a aplicação de _ aos itens dos canais _&#xD;</translations><inputs><input type="%repRing"></input><input type="%mult%l"></input></inputs><script><block s="doWarp"><script><block s="doIf"><block s="reportEquals"><block s="reportListItem"><l>1</l><block var="stream"/></block><block s="reportNewList"><list></list></block></block><script><block s="doReport"><block s="reportNewList"><list></list></block></block></script></block><block s="doReport"><custom-block s="%s in front of stream %anyUE"><block s="evaluate"><block var="function"/><block s="reportMap"><block s="reifyReporter"><autolambda><custom-block s="head of stream %l"><l/></custom-block></autolambda><list></list></block><block var="stream"/></block></block><custom-block s="map %repRing over stream %mult%l"><block var="function"/><block s="reportMap"><block s="reifyReporter"><autolambda><custom-block s="tail of stream %l"><l/></custom-block></autolambda><list></list></block><block var="stream"/></block></custom-block></custom-block></block></script></block></script></block-definition><block-definition s="keep items such that %&apos;pred&apos; from stream %&apos;stream&apos;" type="reporter" category="lists"><comment x="0" y="0" w="418.6106770833333" collapsed="false">The stream version of KEEP.&#xD;&#xD;Streams, also called lazy lists, are like lists except that&#xD;items are not computed until they&apos;re needed.  This allows&#xD;for more efficient handling of large computed lists, and&#xD;even infinite lists.  The only piece of magic is in &#xD;IN FRONT OF STREAM, whose second input is of type &#xD;Unevaluated, which means that it&apos;s a procedure, with &#xD;a sort of invisible gray ring. So HEAD OF STREAM is just &#xD;ITEM 1 OF, but TAIL OF STREAM has a CALL block &#xD;to make the computation happen.&#xD;&#xD;For a tutorial introduction to streams, read SICP 3.5:&#xD;https://mitpress.mit.edu/sites/default/files/sicp/full-text/book/book-Z-H-24.html#%_sec_3.5&#xD;or Brian&apos;s lecture notes (start on page 74):&#xD;https://people.eecs.berkeley.edu/&#126;bh/61a-pages/Volume2/notes.pdf&#xD;The above are clickable links!</comment><header></header><code></code><translations>pt:os itens tais que _ do canal _&#xD;</translations><inputs><input type="%predRing"></input><input type="%l"></input></inputs><script><block s="doWarp"><script><block s="doIf"><block s="reportEquals"><block var="stream"/><block s="reportNewList"><list></list></block></block><script><block s="doReport"><block s="reportNewList"><list></list></block></block></script></block><block s="doIfElse"><block s="evaluate"><block var="pred"/><list><custom-block s="head of stream %l"><block var="stream"/></custom-block></list></block><script><block s="doReport"><custom-block s="%s in front of stream %anyUE"><custom-block s="head of stream %l"><block var="stream"/></custom-block><custom-block s="keep items such that %predRing from stream %l"><block var="pred"/><custom-block s="tail of stream %l"><block var="stream"/></custom-block></custom-block></custom-block></block></script><script><block s="doReport"><custom-block s="keep items such that %predRing from stream %l"><block var="pred"/><custom-block s="tail of stream %l"><block var="stream"/></custom-block></custom-block></block></script></block></script></block></script></block-definition><block-definition s="show stream %&apos;stream&apos; %&apos;number&apos;" type="reporter" category="lists"><comment x="0" y="0" w="364" collapsed="false">The inputs are a stream and a positive integer.  SHOW STREAM reports a&#xD;regular finite list of length less than (for short finite streams) or equal to the&#xD;second input.  It&apos;s useful because an infinite stream can&apos;t be displayed in a&#xD;finite amount of time.</comment><header></header><code></code><translations>pt:uma lista com os itens do canal _ até ao _ º&#xD;</translations><inputs><input type="%l"></input><input type="%n">10</input></inputs><script><block s="doIf"><block s="reportListIsEmpty"><block var="stream"/></block><script><block s="doReport"><block s="reportNewList"><list></list></block></block></script></block><block s="doIf"><block s="reportEquals"><block var="number"/><l>0</l></block><script><block s="doReport"><block s="reportNewList"><list></list></block></block></script></block><block s="doReport"><block s="reportCONS"><custom-block s="head of stream %l"><block var="stream"/></custom-block><custom-block s="show stream %l %n"><custom-block s="tail of stream %l"><block var="stream"/></custom-block><block s="reportDifference"><block var="number"/><l>1</l></block></custom-block></block></block></script></block-definition><block-definition s="stream %&apos;items&apos;" type="reporter" category="lists"><comment x="0" y="0" w="343.3333333333333" collapsed="false">Make a stream from a finite collection of items, like the LIST primitive.&#xD;Since this block is typically used for small amounts of data, it does not&#xD;delay computation of its inputs.</comment><header></header><code></code><translations>pt:um canal com _&#xD;</translations><inputs><input type="%mult%s"></input></inputs><script><block s="doIf"><block s="reportListIsEmpty"><block var="items"/></block><script><block s="doReport"><block var="items"/></block></script></block><block s="doReport"><custom-block s="%s in front of stream %anyUE"><block s="reportListItem"><l>1</l><block var="items"/></block><custom-block s="stream %mult%s"><block s="reportCDR"><block var="items"/></block></custom-block></custom-block></block></script></block-definition><block-definition s="sieve %&apos;stream&apos;" type="reporter" category="lists"><comment x="0" y="0" w="478" collapsed="false">Call this block with STREAM WITH NUMBERS FROM 2&#xD;as its input to get the infinite stream of all the prime numbers.&#xD;&#xD;It&apos;s called SIEVE because the algorithm it uses is the Sieve of&#xD;Eratosthenes (clickable link):&#xD;https://en.wikipedia.org/wiki/Sieve_of_Eratosthenes&#xD;&#xD;Look inside; it&apos;s a beautifully elegant algorithm.&#xD;&#xD;For a tutorial introduction to streams, read SICP 3.5:&#xD;https://mitpress.mit.edu/sites/default/files/sicp/full-text/book/book-Z-H-24.html#%_sec_3.5&#xD;or Brian&apos;s lecture notes (start on page 74):&#xD;https://people.eecs.berkeley.edu/&#126;bh/61a-pages/Volume2/notes.pdf&#xD;The above are clickable links!</comment><header></header><code></code><translations>pt:a crivagem do canal _&#xD;</translations><inputs><input type="%l"></input></inputs><script><block s="doWarp"><script><block s="doReport"><custom-block s="%s in front of stream %anyUE"><custom-block s="head of stream %l"><block var="stream"/></custom-block><custom-block s="sieve %l"><custom-block s="keep items such that %predRing from stream %l"><block s="reifyPredicate"><autolambda><block s="reportGreaterThan"><block s="reportModulus"><l></l><custom-block s="head of stream %l"><block var="stream"/></custom-block></block><l>0</l></block></autolambda><list></list></block><custom-block s="tail of stream %l"><block var="stream"/></custom-block></custom-block></custom-block></custom-block></block></script></block></script></block-definition><block-definition s="stream with numbers from %&apos;start&apos;" type="reporter" category="lists"><comment x="0" y="0" w="418.6106770833333" collapsed="false">The stream version of NUMBERS FROM 1 TO, with no&#xD;ending number because it reports the infinite stream of all&#xD;the integers greater than or equal to its input.&#xD;&#xD;Read the code!  It&apos;s deceptively simple.&#xD;&#xD;Streams, also called lazy lists, are like lists except that&#xD;items are not computed until they&apos;re needed.  This allows&#xD;for more efficient handling of large computed lists, and&#xD;even infinite lists.  The only piece of magic is in &#xD;IN FRONT OF STREAM, whose second input is of type &#xD;Unevaluated, which means that it&apos;s a procedure, with &#xD;a sort of invisible gray ring. So HEAD OF STREAM is just &#xD;ITEM 1 OF, but TAIL OF STREAM has a CALL block &#xD;to make the computation happen.&#xD;&#xD;For a tutorial introduction to streams, read SICP 3.5:&#xD;https://mitpress.mit.edu/sites/default/files/sicp/full-text/book/book-Z-H-24.html#%_sec_3.5&#xD;or Brian&apos;s lecture notes (start on page 74):&#xD;https://people.eecs.berkeley.edu/&#126;bh/61a-pages/Volume2/notes.pdf&#xD;The above are clickable links!</comment><header></header><code></code><translations>pt:um canal com os números a partir de _&#xD;</translations><inputs><input type="%n">1</input></inputs><script><block s="doReport"><custom-block s="%s in front of stream %anyUE"><block var="start"/><custom-block s="stream with numbers from %n"><block s="reportSum"><block var="start"/><l>1</l></block></custom-block></custom-block></block></script></block-definition><block-definition s="stream demo" type="command" category="lists"><comment x="0" y="0" w="174.66666666666666" collapsed="true">Read the code while running it, </comment><header></header><code></code><translations></translations><inputs></inputs><script><block s="doDeclareVariables"><list><l>ones</l><l>ints</l><l>primes</l></list></block><block s="doSetVar"><l>ones</l><custom-block s="%s in front of stream %anyUE"><l>1</l><block var="ones"/></custom-block></block><block s="doSetVar"><l>ints</l><custom-block s="%s in front of stream %anyUE"><l>1</l><custom-block s="map %repRing over stream %mult%l"><block s="reifyReporter"><autolambda><block s="reportSum"><l></l><l></l></block></autolambda><list></list></block><list><block var="ones"/><block var="ints"/></list></custom-block></custom-block></block><block s="doSetVar"><l>primes</l><custom-block s="sieve %l"><custom-block s="stream with numbers from %n"><l>2</l></custom-block></custom-block></block><block s="doSayFor"><custom-block s="show stream %l %n"><block var="ones"/><l>10</l></custom-block><l>2</l></block><block s="doSayFor"><custom-block s="show stream %l %n"><block var="ints"/><l>10</l></custom-block><l>2</l></block><block s="doSayFor"><custom-block s="show stream %l %n"><block var="primes"/><l>10</l></custom-block><l>2</l></block></script></block-definition></blocks><variables><variable name="date"><l>6</l></variable><variable name="month"><l>8</l></variable><variable name="year"><l>2021</l></variable><variable name="whole date"><l>0</l></variable><variable name="reason for a reminder"><l>hello</l></variable><variable name="end"><l>true</l></variable></variables></project><media name="reminder system" app="Snap! 6, https://snap.berkeley.edu" version="1"></media></snapdata>