<snapdata remixID="11395718"><project name="Programmatic OOP" app="Snap! 7, https://snap.berkeley.edu" version="2"><notes>A second attempt at making class/instance OOP in a language which already has it*. Now with multiple inheritance! Also now with janky invisible global variables! Yeah this is pretty terrible, I wouldn&apos;t use this if I were you&#xD;&#xD;*See chapters VII and VIII of the Snap! Manual</notes><thumbnail>data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAKAAAAB4CAYAAAB1ovlvAAAABHNCSVQICAgIfAhkiAAAAnlJREFUeF7t17Fpw1AARdFv7yJNoEVcawrPZZWex3uoikMgIU0S0viCOGoleOj+A0Knt/druBSICpwAjMqb/SgAIAhpAQDT/MYBZCAtAGCa3ziADKQFAEzzGweQgbQAgGl+4wAykBYAMM1vHEAG0gIApvmNA8hAWgDANL9xABlICwCY5jcOIANpAQDT/MYBZCAtAGCa3ziADKQFAEzzGweQgbQAgGl+4wAykBYAMM1vHEAG0gIApvmNA8hAWgDANL9xABlICwCY5jcOIANpAQDT/MYBZCAtAGCa3ziADKQFAEzzGweQgbQAgGl+4wAykBYAMM1vHEAG0gIApvmNA8hAWgDANL9xABlICwCY5jcOIANpAQDT/MYBZCAtAGCa3ziADKQFAEzzGweQgbQAgD/kX5ZlXK/Xsa5rekBHHwfwlxO+XC5fdx+Px9i2bUzTdHQTL30/AP/I/R3h56Pn83ns+z7u9/tLD+uIYwACmLoG8B+f4NvtNuZ5Tg/saOMA+glJTQOY5jcOIANpAQDT/MYBZCAtAGCa3ziADKQFAEzzGweQgbQAgGl+4wAykBYAMM1vHEAG0gIApvmNA8hAWgDANL9xABlICwCY5jcOIANpAQDT/MYBZCAtAGCa3ziADKQFAEzzGweQgbQAgGl+4wAykBYAMM1vHEAG0gIApvmNA8hAWgDANL9xABlICwCY5jcOIANpAQDT/MYBZCAtAGCa3ziADKQFAEzzGweQgbQAgGl+4wAykBYAMM1vHEAG0gIApvmNA8hAWgDANL9xABlICwCY5jcOIANpAQDT/MYBZCAtAGCa3ziADKQFAEzzGweQgbQAgGl+40/XCfyor9vguwAAAABJRU5ErkJggg==</thumbnail><scenes select="1"><scene name="Programmatic OOP"><notes>A second attempt at making class/instance OOP in a language which already has it*. Now with multiple inheritance! Also now with janky invisible global variables! Yeah this is pretty terrible, I wouldn&apos;t use this if I were you&#xD;&#xD;*See chapters VII and VIII of the Snap! Manual</notes><palette><category name="Programmatic OOP" color="0,194,158,1"/></palette><hidden></hidden><headers></headers><code></code><blocks><block-definition s="field %&apos;name&apos; $nl value: %&apos;value&apos;" type="reporter" category="Programmatic OOP"><header></header><code></code><translations></translations><inputs><input type="%s"></input><input type="%s"></input></inputs><script><block s="doReport"><custom-block s="basic object %br type name: %s %br properties: %mult%l"><l>field</l><list><custom-block s="%s : %s"><l>name</l><block var="name"/></custom-block><custom-block s="%s : %s"><l>value</l><block var="value"/></custom-block></list></custom-block></block></script></block-definition><block-definition s="{ $nl %&apos;kv&apos; $nl }" type="reporter" category="lists"><header></header><code></code><translations></translations><inputs><input type="%mult%l"></input></inputs><script><block s="doReport"><block var="kv"/></block></script></block-definition><block-definition s="%&apos;k&apos; : %&apos;v&apos;" type="reporter" category="lists"><header></header><code></code><translations></translations><inputs><input type="%s"></input><input type="%s"></input></inputs><script><block s="doReport"><block s="reportNewList"><list><block var="k"/><block var="v"/></list></block></block></script></block-definition><block-definition s="method %&apos;name&apos; $nl %&apos;lambda&apos;" type="reporter" category="Programmatic OOP"><header></header><code></code><translations></translations><inputs><input type="%s"></input><input type="%cmdRing"></input></inputs><script><block s="doReport"><custom-block s="basic object %br type name: %s %br properties: %mult%l"><l>method</l><list><custom-block s="%s : %s"><l>name</l><block var="name"/></custom-block><custom-block s="%s : %s"><l>value</l><block var="lambda"/></custom-block></list></custom-block></block></script></block-definition><block-definition s="basic object $nl type name: %&apos;type&apos; $nl properties: %&apos;props&apos;" type="reporter" category="Programmatic OOP"><header></header><code></code><translations></translations><inputs><input type="%s"></input><input type="%mult%l"></input></inputs><script><block s="doReport"><block s="reportConcatenatedLists"><list><custom-block s="{ %br %mult%l %br }"><list><custom-block s="%s : %s"><l>_type</l><block var="type"/></custom-block></list></custom-block><block var="props"/></list></block></block></script></block-definition><block-definition s="class %&apos;name&apos; extends %&apos;parents&apos; $nl fields: %&apos;fields&apos; $nl init method: %&apos;init&apos; $nl other methods: %&apos;methods&apos;" type="reporter" category="Programmatic OOP"><header></header><code></code><translations></translations><inputs><input type="%s"></input><input type="%mult%l"></input><input type="%mult%l"></input><input type="%cmdRing"></input><input type="%mult%l"></input></inputs><script><block s="doDeclareVariables"><list><l>obj</l></list></block><block s="doSetVar"><l>obj</l><custom-block s="basic object %br type name: %s %br properties: %mult%l"><l>class</l><list></list></custom-block></block><block s="doForEach"><l>parent</l><block var="parents"/><script><custom-block s="shallow merge %l into %l"><block var="parent"/><block var="obj"/></custom-block></script></block><custom-block s="shallow merge %l into %l"><custom-block s="basic object %br type name: %s %br properties: %mult%l"><l>class</l><list><custom-block s="%s : %s"><l>name</l><block var="name"/></custom-block><custom-block s="%s : %s"><l>extends</l><block var="parents"/></custom-block><custom-block s="%s : %s"><l>fields</l><block s="reportConcatenatedLists"><list><block var="fields"/><block s="reportNewList"><list><custom-block s="method %s %br %cmdRing"><block var="name"/><block var="init"/></custom-block></list></block><block var="methods"/></list></block></custom-block></list></custom-block><block var="obj"/></custom-block><block s="doReport"><block var="obj"/></block></script></block-definition><block-definition s="set value of key %&apos;k&apos; in %&apos;o&apos; to %&apos;v&apos;" type="command" category="lists"><header></header><code></code><translations></translations><inputs><input type="%s"></input><input type="%l"></input><input type="%s"></input></inputs><script><block s="doReplaceInList"><l>2</l><block s="reportListItem"><custom-block s="index of key %s in %l"><block var="k"/><block var="o"/></custom-block><block var="o"/></block><block var="v"/></block></script></block-definition><block-definition s="delete key %&apos;k&apos; and its value from %&apos;o&apos;" type="command" category="lists"><header></header><code></code><translations></translations><inputs><input type="%s"></input><input type="%l"></input></inputs><script><block s="doDeleteFromList"><custom-block s="index of key %s in %l"><block var="k"/><block var="o"/></custom-block><block var="o"/></block></script></block-definition><block-definition s="index of key %&apos;k&apos; in %&apos;o&apos;" type="reporter" category="lists"><header></header><code></code><translations></translations><inputs><input type="%s"></input><input type="%l"></input></inputs><script><block s="doReport"><block s="reportListIndex"><block var="k"/><block s="reportMap"><block s="reifyReporter"><autolambda><block s="reportListItem"><l>1</l><l/></block></autolambda><list></list></block><block var="o"/></block></block></block></script></block-definition><block-definition s="shallow merge %&apos;o&apos; into %&apos;p&apos;" type="command" category="lists"><header></header><code></code><translations></translations><inputs><input type="%l"></input><input type="%l"></input></inputs><script><block s="doForEach"><l>pair</l><block var="o"/><script><block s="doIfElse"><custom-block s="%l has key %s ?"><block var="p"/><block s="reportListItem"><l>1</l><block var="pair"/></block></custom-block><script><custom-block s="set value of key %s in %l to %s"><block s="reportListItem"><l>1</l><block var="pair"/></block><block var="p"/><block s="reportListItem"><l>2</l><block var="pair"/></block></custom-block></script><script><block s="doAddToList"><block var="pair"/><block var="p"/></block></script></block></script></block></script></block-definition><block-definition s="%&apos;o&apos; has key %&apos;k&apos; ?" type="predicate" category="lists"><header></header><code></code><translations></translations><inputs><input type="%l"></input><input type="%s"></input></inputs><script><block s="doReport"><block s="reportListContainsItem"><block s="reportMap"><block s="reifyReporter"><autolambda><block s="reportListItem"><l>1</l><l/></block></autolambda><list></list></block><block var="o"/></block><block var="k"/></block></block></script></block-definition><block-definition s="set field %&apos;f&apos; of %&apos;o&apos; to %&apos;v&apos;" type="command" category="Programmatic OOP"><header></header><code></code><translations></translations><inputs><input type="%s"></input><input type="%l"></input><input type="%s"></input></inputs><script><custom-block s="set value of key %s in %l to %s"><l>value</l><custom-block s="key %s in %l"><block var="f"/><block var="o"/></custom-block><block var="v"/></custom-block></script></block-definition><block-definition s="key %&apos;k&apos; in %&apos;o&apos;" type="reporter" category="lists"><header></header><code></code><translations></translations><inputs><input type="%s"></input><input type="%l"></input></inputs><script><block s="doDeclareVariables"><list><l>x</l></list></block><block s="doSetVar"><l>x</l><block s="reportFindFirst"><block s="reifyPredicate"><autolambda><block s="reportEquals"><block s="reportListItem"><l>1</l><l/></block><block var="k"/></block></autolambda><list></list></block><block var="o"/></block></block><block s="doReport"><block s="reportIfElse"><block s="reportEquals"><block var="x"/><l></l></block><l></l><block s="reportListItem"><l>2</l><block var="x"/></block></block></block></script></block-definition><block-definition s="this" type="reporter" category="Programmatic OOP"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doApplyExtension"><l>var_declare(scope, name)</l><list><l>global</l><l>_this</l></list></block><block s="doIf"><block s="reportEquals"><block var="_this"/><l>0</l></block><script><block s="doApplyExtension"><l>var_set(name, val)</l><list><l>_this</l><l></l></list></block></script></block><block s="doReport"><block var="_this"/></block></script></block-definition><block-definition s="%&apos;type&apos; %&apos;field&apos; of %&apos;obj type&apos; %&apos;obj&apos;" type="reporter" category="Programmatic OOP"><header></header><code></code><translations></translations><inputs><input type="%s" readonly="true">field<options>field&#xD;method</options></input><input type="%s"></input><input type="%s" readonly="true">object<options>object&#xD;class</options></input><input type="%l"></input></inputs><script><block s="doDeclareVariables"><list><l>x</l></list></block><block s="doSetVar"><l>x</l><block s="reportIfElse"><block s="reportEquals"><block var="obj type"/><l>class</l></block><block s="reportFindFirst"><block s="reifyPredicate"><autolambda><block s="reportEquals"><custom-block s="key %s in %l"><l>name</l><l/></custom-block><block var="field"/></block></autolambda><list></list></block><custom-block s="key %s in %l"><l>fields</l><block var="obj"/></custom-block></block><custom-block s="key %s in %l"><block var="field"/><block var="obj"/></custom-block></block></block><block s="doIfElse"><block s="reportEquals"><custom-block s="type of %s"><block var="x"/></custom-block><block var="type"/></block><script><block s="doReport"><custom-block s="key %s in %l"><l>value</l><block var="x"/></custom-block></block></script><script><block s="doApplyExtension"><l>err_error(msg)</l><list><block s="reportJoinWords"><list><block var="field"/><l> is not a </l><block var="type"/></list></block></list></block></script></block></script></block-definition><block-definition s="type of %&apos;o&apos;" type="reporter" category="Programmatic OOP"><header></header><code></code><translations></translations><inputs><input type="%s"></input></inputs><script><block s="doIfElse"><block s="reportAnd"><block s="reportEquals"><block s="reportTypeOf"><block var="o"/></block><l>list</l></block><block s="reportAnd"><block s="reportEquals"><block s="reportTypeOf"><block s="reportListItem"><l>1</l><block var="o"/></block></block><l>list</l></block><custom-block s="%l has key %s ?"><block var="o"/><l>_type</l></custom-block></block></block><script><block s="doReport"><custom-block s="key %s in %l"><l>_type</l><block var="o"/></custom-block></block></script><script><block s="doReport"><block s="reportTypeOf"><block var="o"/></block></block></script></block></script></block-definition><block-definition s="a new instance of class %&apos;class&apos; $nl arguments: %&apos;args&apos;" type="reporter" category="Programmatic OOP"><header></header><code></code><translations></translations><inputs><input type="%l"></input><input type="%mult%s"></input></inputs><script><block s="doDeclareVariables"><list><l>obj</l><l>props</l></list></block><block s="doSetVar"><l>props</l><block s="reportNewList"><list></list></block></block><block s="doForEach"><l>prop</l><custom-block s="deep copy of %l"><custom-block s="key %s in %l"><l>fields</l><block var="class"/></custom-block></custom-block><script><block s="doAddToList"><custom-block s="%s : %s"><custom-block s="key %s in %l"><l>name</l><block var="prop"/></custom-block><block var="prop"/></custom-block><block var="props"/></block></script></block><block s="doSetVar"><l>obj</l><custom-block s="basic object %br type name: %s %br properties: %mult%l"><custom-block s="key %s in %l"><l>name</l><block var="class"/></custom-block><block var="props"/></custom-block></block><custom-block s="%s method %s of %l %br args: %mult%s"><l>run</l><custom-block s="key %s in %l"><l>name</l><block var="class"/></custom-block><block var="obj"/><block var="args"/></custom-block><block s="doReport"><block var="obj"/></block></script></block-definition><block-definition s="deep copy of %&apos;list&apos;" type="reporter" category="lists"><header></header><code></code><translations></translations><inputs><input type="%l"></input></inputs><script><block s="doWarp"><script><block s="doDeclareVariables"><list><l>result</l></list></block><block s="doSetVar"><l>result</l><block s="reportNewList"><list></list></block></block><block s="doForEach"><l>item</l><block var="list"/><script><block s="doAddToList"><block s="reportIfElse"><block s="reportEquals"><block s="reportTypeOf"><block var="item"/></block><l>list</l></block><custom-block s="deep copy of %l"><block var="item"/></custom-block><block var="item"/></block><block var="result"/></block></script></block></script></block><block s="doReport"><block var="result"/></block></script></block-definition><block-definition s="%&apos;operation&apos; method %&apos;method&apos; of %&apos;obj&apos; $nl args: %&apos;args&apos;" type="command" category="Programmatic OOP"><header></header><code></code><translations></translations><inputs><input type="%s" readonly="true">run<options>run&#xD;launch</options></input><input type="%s"></input><input type="%l"></input><input type="%mult%s"></input></inputs><script><block s="doDeclareVariables"><list><l>runnable</l></list></block><block s="doSetVar"><l>runnable</l><block s="reifyScript"><script><block s="doDeclareVariables"><list><l>old this</l></list></block><block s="doSetVar"><l>old this</l><custom-block s="this"></custom-block></block><custom-block s="set hidden this to %s"><block var="this"/></custom-block><block s="doRun"><custom-block s="%s %s of %s %l"><l>method</l><block var="method"/><l>object</l><block var="this"/></custom-block><block var="arguments"/></block><custom-block s="set hidden this to %s"><block var="old this"/></custom-block></script><list><l>this</l><l>arguments</l></list></block></block><block s="doIfElse"><block s="reportEquals"><block var="operation"/><l>run</l></block><script><block s="doRun"><block var="runnable"/><list><block var="obj"/><block var="args"/></list></block></script><script><block s="fork"><block var="runnable"/><list><block var="obj"/><block var="args"/></list></block></script></block></script></block-definition><block-definition s="set hidden this to %&apos;v&apos;" type="command" category="other"><header></header><code></code><translations></translations><inputs><input type="%s"></input></inputs><script><block s="doApplyExtension"><l>var_declare(scope, name)</l><list><l>global</l><l>_this</l></list></block><block s="doApplyExtension"><l>ide_hide(block)</l><list><block s="reifyReporter"><autolambda><block var="_this"/></autolambda><list></list></block></list></block><block s="doApplyExtension"><l>var_set(name, val)</l><list><l>_this</l><block var="v"/></list></block></script></block-definition><block-definition s="call method %&apos;method&apos; of %&apos;obj&apos; $nl args: %&apos;args&apos;" type="reporter" category="Programmatic OOP"><header></header><code></code><translations></translations><inputs><input type="%s"></input><input type="%l"></input><input type="%mult%s"></input></inputs><script><block s="doDeclareVariables"><list><l>runnable</l></list></block><block s="doSetVar"><l>runnable</l><block s="reifyScript"><script><block s="doDeclareVariables"><list><l>old this</l></list></block><block s="doSetVar"><l>old this</l><custom-block s="this"></custom-block></block><custom-block s="set hidden this to %s"><block var="this"/></custom-block><block s="doRun"><custom-block s="%s %s of %s %l"><l>method</l><block var="method"/><l>object</l><block var="this"/></custom-block><block var="arguments"/></block><custom-block s="set hidden this to %s"><block var="old this"/></custom-block></script><list><l>this</l><l>arguments</l></list></block></block><block s="doReport"><block s="evaluate"><block var="runnable"/><list><block var="obj"/><block var="args"/></list></block></block></script></block-definition></blocks><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" id="594"><pentrails>data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAeAAAAFoCAYAAACPNyggAAAABHNCSVQICAgIfAhkiAAADoVJREFUeF7t1cEJAAAIxDDdf2m3sJ+4wEEQuuMIECBAgACBd4F9XzRIgAABAgQIjAB7AgIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECByxcQFpoRMBzwAAAABJRU5ErkJggg==</pentrails><costumes><list struct="atomic" id="595"></list></costumes><sounds><list struct="atomic" id="596"></list></sounds><variables></variables><blocks></blocks><scripts></scripts><sprites select="1"><sprite name="Sprite" 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="601"><costumes><list struct="atomic" id="602"></list></costumes><sounds><list struct="atomic" id="603"></list></sounds><blocks></blocks><variables></variables><scripts><script x="315" y="362"><block s="doDeclareVariables"><list><l>Clock</l><l>my cool clock</l></list><comment w="90" collapsed="true">Demo script</comment></block><block s="doSetVar"><l>Clock</l><custom-block s="class %s extends %mult%l %br fields: %mult%l %br init method: %cmdRing %br other methods: %mult%l"><l>Clock</l><list></list><list><custom-block s="field %s %br value: %s"><l>timezone</l><l></l></custom-block></list><block s="reifyScript"><script><custom-block s="set field %s of %l to %s"><l>timezone</l><custom-block s="this"></custom-block><block var="timezone"/></custom-block></script><list><l>timezone</l></list></block><list><custom-block s="method %s %br %cmdRing"><l>now</l><block s="reifyScript"><script><block s="doReport"><block s="reportDate"><l><option>time in milliseconds</option></l></block></block></script><list></list></block></custom-block><custom-block s="method %s %br %cmdRing"><l>localTime</l><block s="reifyScript"><script><block s="doReport"><l>NYI</l></block></script><list></list></block></custom-block></list></custom-block></block><block s="doSetVar"><l>my cool clock</l><custom-block s="a new instance of class %l %br arguments: %mult%s"><block var="Clock"/><list><l>Europe/London</l></list></custom-block></block><block s="bubble"><custom-block s="call method %s of %l %br args: %mult%s"><l>now</l><block var="my cool clock"/><list></list></custom-block></block></script><script x="319" y="268.66666666666674"><block s="doApplyExtension"><l>var_delete(name)</l><list><l>_this</l></list><comment w="467" collapsed="false">You might want to do this before saving (the library creates a hidden variable called `_this` which you&#xD;probably don&apos;t want cluttering up your project file)</comment></block></script></scripts></sprite></sprites></stage><variables><variable name="_this" hidden="true"><list id="684"><item><list struct="atomic" id="685">_type,Clock</list></item><item><list id="686"><item><l>timezone</l></item><item><list id="687"><item><list struct="atomic" id="688">_type,field</list></item><item><list struct="atomic" id="689">name,timezone</list></item><item><list struct="atomic" id="690">value,Europe/London</list></item></list></item></list></item><item><list id="691"><item><l>Clock</l></item><item><list id="692"><item><list struct="atomic" id="693">_type,method</list></item><item><list struct="atomic" id="694">name,Clock</list></item><item><list id="695"><item><l>value</l></item><item><context id="696"><inputs><input>timezone</input></inputs><variables></variables><script><custom-block s="set field %s of %l to %s"><l>timezone</l><custom-block s="this"></custom-block><block var="timezone"/></custom-block></script><receiver><ref id="601"></ref></receiver><origin><ref id="601"></ref></origin><context id="704"><inputs></inputs><variables><variable name="Clock"><list id="706"><item><list struct="atomic" id="707">_type,class</list></item><item><list struct="atomic" id="708">name,Clock</list></item><item><list id="709"><item><l>extends</l></item><item><list struct="atomic" id="710"></list></item></list></item><item><list id="711"><item><l>fields</l></item><item><list id="712"><item><list id="713"><item><list struct="atomic" id="714">_type,field</list></item><item><list struct="atomic" id="715">name,timezone</list></item><item><list struct="atomic" id="716">value,</list></item></list></item><item><list id="717"><item><list struct="atomic" id="718">_type,method</list></item><item><list struct="atomic" id="719">name,Clock</list></item><item><list id="720"><item><l>value</l></item><item><ref id="696"></ref></item></list></item></list></item><item><list id="721"><item><list struct="atomic" id="722">_type,method</list></item><item><list struct="atomic" id="723">name,now</list></item><item><list id="724"><item><l>value</l></item><item><context id="725"><inputs></inputs><variables></variables><script><block s="doReport"><block s="reportDate"><l><option>time in milliseconds</option></l></block></block></script><receiver><ref id="601"></ref></receiver><origin><ref id="601"></ref></origin></context></item></list></item></list></item><item><list id="732"><item><list struct="atomic" id="733">_type,method</list></item><item><list struct="atomic" id="734">name,localTime</list></item><item><list id="735"><item><l>value</l></item><item><context id="736"><inputs></inputs><variables></variables><script><block s="doReport"><l>NYI</l></block></script><receiver><ref id="601"></ref></receiver><origin><ref id="601"></ref></origin></context></item></list></item></list></item></list></item></list></item></list></variable><variable name="my cool clock"><ref id="684"></ref></variable></variables><receiver><ref id="601"></ref></receiver><origin><ref id="601"></ref></origin></context></context></item></list></item></list></item></list></item><item><list id="741"><item><l>now</l></item><item><list id="742"><item><list struct="atomic" id="743">_type,method</list></item><item><list struct="atomic" id="744">name,now</list></item><item><list id="745"><item><l>value</l></item><item><ref id="725"></ref></item></list></item></list></item></list></item><item><list id="746"><item><l>localTime</l></item><item><list id="747"><item><list struct="atomic" id="748">_type,method</list></item><item><list struct="atomic" id="749">name,localTime</list></item><item><list id="750"><item><l>value</l></item><item><ref id="736"></ref></item></list></item></list></item></list></item></list></variable></variables></scene></scenes></project><media name="Programmatic OOP" app="Snap! 7, https://snap.berkeley.edu" version="2"></media></snapdata>