BLENDER_v244REND 1GLOB  0opSRx2pSRMaterialcreenȈx55h99z0DATAȈ83DATA833ȈDATA3383DATA343DATA4X43DATAX444DATA44X4DATA4054DATA05x54,DATAx505,DATA56833DATA6P65834DATAP6663X4DATA66P64X4DATA6(76Ȉ4DATA(7p763X4DATAp77(734DATA78p7X44DATA8H8744DATAH888Ȉ05DATA88H8405DATA8 984x5DATA 9h984x5DATAh9 905x5DATA9:4833X4DATA:h]944X43 >| m=o?8Y8Z; XDATA;<OutputRenderH>DATA<=;Render LayersRenderH>;DATA=><RenderRender>DATA>@=AnimRender>DATA@(A>FormatRender0>DATA(A@B@Link and MaterialsEditing0>DATA@BXC(AMeshEditing>DATAXCpD@BModifiersEditing>DATApDEXCShapesEditing>XCDATAEFpDObject and LinksObjectH>DATAFGEAnim settingsObject>DATAGHFDrawObject>DATAHIGConstraintsObject0>DATAIKHPreviewMaterial0>DATAKLILinks and PipelineMaterial>DATAL0MKMaterialMaterial>DATA0MHNLRampsMaterial>LDATAHN`O0MShadersMaterialH>DATA`OxPHNMirror TranspMaterialH>HNDATAxPQ`OTextureMaterial`>DATAQRxPPreviewWorldH>DATARSQWorldWorld>DATASTRMist / Stars / PhysicsWorld>TDATATUSAmb OccWorld>DATAUWTTexture and InputWorld0>DATAW XUMap ToWorld0>UDATA XWBakeRender>>DATA8Yw8Z,C0hCC9wiCC(BEC?H?DATA8Zr8Y333?,???????? >| m=o?d:@p=Ay? >| m=o??????p=A B??T= #<C DATAh]z:05x544_M@?AHM---xvxwh^`uDATAh^_OutputRenderH>DATA_`h^Render LayersRenderH>h^DATA`a_RenderRender>DATAab`AnimRender>DATAbcaBakeRender>aDATAcdbFormatRender0>DATAdfcPreviewMaterial>DATAf(gdLinks and PipelineMaterial>DATA(g@hfMaterialMaterial>DATA@hXi(gRampsMaterial>(gDATAXipj@hShadersMaterial,>DATApjkXiMirror TranspMaterial,>XiDATAklpjTextureMaterialD>DATAlmkMap InputMaterialH>kDATAmnlMap ToMaterialH>kDATAnomSSSMaterial>DATAoqnPreviewWorldH>DATAqroWorldWorld>DATAr0sqMist / Stars / PhysicsWorld>0sDATA0sHtrAmb OccWorld>DATAHt`u0sTexture and InputWorld0>DATA`uHtMap ToWorld0>HtDATAxvwxwNCqhCC 1Ĵ7^CC(BEC?H?DATAxwrxv333?NUB}?.;x@>%>*dNv<}y?-}cѦȺkIz?XB}?%><.;/d~y?z@>Ov)}c 7> 6>?,K@X<x@>bOzJw?Nv?r=Gt?c>-}c>M\?z@T؝>k7=<;=Q!d?,ſȅ-ABQĿ ן_O?q%?(@_M@?AHMUB}?.;x@>%>*dNv<}y?-}cѦȺkIz??/GBFl`p=A B??3; #<C DATAzh]Ȉ4x505n??AHM+++,{~DATA{r~333?hdUB}?.;x@>%>*dNv<}y?-}cѦȺkIz?XB}?%><.;/d~y?z@>Ov)}c 7> 6>??X<x@+@>bOzJw?Nv?=Gt?c>-}c>pM\?z@NA?=P<3;=Q!d?,ſȅ-ABQĿ ן_O?q%?(@n??AHMUB}?.;x@>%>*dNv<}y?-}cѦȺkIz??/GBFl`8pB? B??3; #<CXG0Y ???? DATAh~y{333?hd$Save Asg:\myweb\download\Lsystem140.blend}SRxp2SRScriptcreen.001胐؇ Ɛ0DATA`DATA`DATA`DATA8DATA8DATAȂ8DATAȂxDATAXȂxDATAXhxDATAXhDATA胐0`DATA0x胐`8DATAx0DATAx8DATAPȂDATAPDATAPDATA(ȂXDATA(pXDATAp(8DATApDATAHXDATAH8ȂDATA؇HȂDATA؇DATA  8`PPDATA @ Xe?? JLiyiyi   pDATAxp}  333? - iiy?DATA ~p333? DATA{@ 333? CCh@Կ@?@BHDATA@rp333? r?i+NN?R?p=j z?yP>e=ɶW ?r?R?a i+r=ڞz?JN?wP>Of?~Q??j)L?{;j0NNN?p>??dC?PyPQN=kF@ @>3?`ƹȓU=#e?_bq\@lI@f@?@/? S@ B?=Cb>*UF  DATA(pvȐ@333? zC̽̌?zC@!! #< #<`jFzD OBzC̽̌?DATAȐp 333? zCCHBCbb?CFC= ADATAwȐ333? DdCDv@CC(BDC??DATA 333? SELECT IMAGE&(ZZ&4\leaves.tgagd:\Armagan\Blender\Lsystem\extures\ JDATAhy333? LOAD FILEFilei:\trees\\.\der\Lsystem\ew Folder\ew Folder\p\blends\draw_buttons.blend\TeFirstTree.defdm10.blend0.blendsystem.blendlendeneration for povray.htmSDATA@Ɛ Ȃ8Xe??FϘ$AHMgygyg h aŐ  @DATA@XOutputRender>DATAXp@Render LayersRender>@DATApXRenderRender@>DATApAnimRender>DATAFormatRender>DATAr蠐333?@UB}?.;x@>%>*dNv<}y?-}cѦȺkIz?XB}?%><.;/d~y?z@>Ov)}c 7> 6>?v?DD=x@̐>˜RJw?Nv?=?c>-}c>ۉ>fo?z@1?[=y<3nx; ޢ?!ſ-A6QĿ֟3?Lk?(@e??FϘ$AHMUB}?.;x@>%>*dNv<}y?-}cѦȺkIz??/GBFl`E#@z@ B??4R;=C?!N|L><>W{ =2? ???? DATA蠐w衐333?@DdC( CDP5qXCC(BDC??h!DATA衐z0蠐333?@0AAH\rA-kKBh A@CC #<@hо DATA,pMAffA@DATA,pУTEffADATA,У0pTEADATA,0УOBX¤p=APSDATA,0OBp¤p=A}DATA,PMEp|ADATA,POBX`APzDATA,PMEXA&DATA,pOBpHAwDATA,pЦMEpA@DATA,Ц0pOB¤p=AP`DATA,0ЦMEA ޘDATA,0OB`ADATA,PME|ADATA,POB¤p=APDATA,PMEADATA,pOB`ADATA,pЩMEA8DATA,Щ0pOB¤p=AhDATA,0ЩME|A@DATA,0OB`AhDATA,PMEA@DATA,POB¤p=A`DATA,PME|ADATA,pOB`ADATA,pЬMEADATA,Ь0pOB¤p=A(DATA,0ЬME|A@DATA,0OB`AHKDATA,PMEA@DATA,POB¤p=ADATA,PME|ADATA,pOB`A(DATA,pЯMEA`֘DATA,Я0pOB¤p=ADATA,0ЯME|A`ΘDATA,0OB`A]DATA,PMEA(DATA,POB¤p=APDATA,POBHADATA,pOBHA@DATA,pвOBأ@cDATA,в0pOBHAPDATA,0вMAffADATA,0TEffAȗDATA,PMEA8ZDATA,POBأ@DATA,POB@q= YDATA,pOB@sDATA,pеME|ATDATA,е0pOBp=ApDATA,0еME@|AhODATA,0OB@p=APmDATA,PMEAJDATA,POBp=AjDATA,PME|ADDATA,pOB@`AfDATA,pиME|A0?DATA,и0pOBp=AVDATA,0иOB@p=ADATA,0ME@A/DATA,POBHAЀDATA,PMEAŘDATA,PIM@|AɑDATA,pIMADATA,pлIM@AhDATA,л0pLAAؒDATA,0лLAADATA,0LAAxDATA,PLAAHDATA,PLA|ADATA,PLAA茒DATA,pLAq=ADATA,pоSCDATA,оpIM:jAvA`DATAx0}ؿ衐 333?@8 1>oDATA(ؿv00333?@zC̽̌?zC@!! #< #<`jFzD OBzC̽̌?DATA0ؿ 333?@zCCHBCbb?CFC= ADATAŐ0 333?@SELECT IMAGE&(^^&$bark01.jpga.jpgd:\Armagan\dxengine\VertexShader\s\o JDATAhŐy333?@ave JPEGRYg:\myweb\tutorials\tut-lsyst\der\Blender\Buildings1.blend\Object\raw_buttons.barm2-2d.jpgblendchd39.blendgs39.blenddi DATAƐ@Ȃ=4?q@o?ww x ǐDATAǐȐLink and MaterialsEditing>DATAȐɐǐMeshEditingF>DATAɐʐȐCameraEditingF>DATAʐ̐ɐTexture faceEditing>DATA̐ ͐ʐUV CalculationEditing>ʐDATA ͐8ΐ̐Mesh ToolsEditing>DATA8ΐPϐ ͐Mesh Tools 1Editing>DATAPϐhА8ΐOutputRender>DATAhАѐPϐRenderRenderF>DATAѐҐhАAnimRender>DATAҐӐѐFormatRender>DATAӐԐҐAnim settingsObject>DATAԐՐӐDrawObjectF>DATAՐ֐ԐHooksObjectF>ԐDATA֐ؐՐConstraintsObject>DATAؐ(ِ֐EffectsObject֐DATA(ِ@ڐؐParticle InteractionObject>֐DATA@ڐXې(ِPreviewMaterial>DATAXېpܐ@ڐMaterialMaterial>pܐDATApܐݐXېRampsMaterial>DATAݐސpܐShadersMaterial>DATAސߐݐMirror TranspMaterial>ݐDATAߐސTextureMaterial>DATAߐMap InputMaterial>ߐDATAMap ToMaterial>ߐDATAPreviewWorld>DATA0WorldWorldF>DATA0HMist / Stars / PhysicsWorld>DATAH`0Amb OccWorld>0DATA`xHTexture and InputWorld>DATAx`Map ToWorld>`DATAxScriptlinksScript>DATAPreviewLamp>DATALampLampF>DATAShadow and SpotLamp>DATATexture and InputLamp>DATA(Map ToLamp>DATA(@PreviewTexture>DATA@X(TextureTextureF>DATAXp@Radio RenderRadio>DATApXRadio ToolRadioF>DATApModifiersEditing>DATAShapesEditing>DATARender LayersRender>PϐDATALinks and PipelineMaterialF>DATAr333?Ɛ???1&@ F????@1& F??=4?q@o|ο23AJ;?(͵?0&4O2E*>y@0& F??=4?q@o????1&@ F??(͵?? B?=5;=C1&@ F ???? DATA{@333?ƐCC@M@<?`?B@DATA@w@333?ƐDhCDp= kCC(BDC??DATAx@}@ 333?Ɛ8 1>oDATA(v@@333?ƐzC̽̌?zC@!! #< #<`jFzD OBzC̽̌?DATA@ 333?ƐzCCHBCbb?CFC= ADATA @ 333?ƐSELECT IMAGE&(ZZ&4\leaves.tgagd:\Armagan\Blender\Lsystem\extures\`9JDATAh y333?Ɛ*Save JPEGg:\myweb\download\Lsystem\New Folder\New Folder\p\blends\draw_buttons.blend\Tes30.blend4.blenddlendgs13.blendn }SCpSC1  :>+@A:>+@A:>+@A=Hgdd??<    _@??  ????///render\//#D ;DATA c ȊDATA cH  .YDATAH c  \sDATA c H \pDATA c8  \PmDATA8 c  \jDATA c 8 \fDATA c(  .VDATA( cx  " DATAx c (  ЀDATA cx  .PSDATAch  }DATAhc PzDATAch wDATAcXw P`DATAXcZ DATAcX0!PDATAcH !DATAHc ("hDATAcH _"hDATAc8  `DATA8c  DATAc8 (DATAc(1 HKDATA(cx DATAxc( (DATAcxQ DATAch \]DATAhc .PDATAch *GDATAcX .@DATAXc.cDATAcX\PDATAc.%DATA(Hb,d'=A@DATALmL?B ?o: ?? #<=DATA@ h1 RenderLayerIMtɑIMleaves.jpg5D:\Armagan\Blender\Lsystem\leaves.jpg8|DATA8DATAJFIFddDuckyAdobed##""'"!!"''.030.'>>AA>>AAAAAAAAAAAAAAA!!1!!$!!1>-''''->8;333;8AA>>AAAAAAAAAAAAAAAAA"!1AQaq"2BRr#b3CS4$!1AQaq"2BRbrѢ#3$ ?T&k0J_Ă;ܘנ A-CZַupjO_dGLg )ndۺX[+⿩Eՙ[ZΩ61ӳ[{h ëֽK3.;L[@VToFr^Jz)qXcLM+."m D̬ gj릶g-Ur>җoO*ׄըpA{' 3.6bM^Ÿ]fn-It7qc:k_P0RP{%3-: Y8);re7-HmVp% آ_"]cOs+r)uH譥)U*Ĉby [BUj٧䤤ٗl"+]M6Fi*76Ȱbr -W~L)~ [ώt N׎1|oӋvWv٨/N5452ڐuZBDJZܬBoƖjR1'uIFu3k!LRͰ6 'UiПm 6=[ԇ~{[5؈dJ-lBiUn3 nVh5Xc*ŸPwY.H(,x52ҪPo;MF䱸%& ~xR8D혓/&/zx{Ike5N(W 2y6ɴDκD-"22uS+S}][Zn,>;ݞcw*+n䭤kكۭf<{덬d)O9~oy]]{SLO,ۆY=Kq޺z?#Y;?淛R2碭o/^ڻi_yJStlW>~^MَK_KxK|דo˭MzoĬqocjUU2|6M9FG͹##N3 C~nYpWts^ȺpiU0)Ó^'ܗ6-Vz2YBM67,F]߶ˣ足CsWꋯv73-eU/iLE_SK֛GC^10ۋZδN:ZvO{BK"#܎6\$־{LD 9$'QYN{;%ReB{g 2 Cf>_NbZ WƱ񜓖}'˞ieҠ"uQUrkVVjO\vilok#+ivګUUt,RQee/^NT-ge>6e|*rVl ,ɼCLFҖ%FZD/Zr,QDUЊqլ᧌ӭ+pU^,zeto1(R 'R+U_ԓ6ĽɄWdwQ+u*fυ܊BM?Rpw)8JoKY}JbdX/Z*ՒKszx56;8y :{j}-mn=|Z_|}\a+Nv-zG];:/"[Q)+u `DPRԻxQ]o9)qq=uc뺗R!`ԸKu޷ժf>] q767yE]n/*&,:</חkdgmg:3m-雷r;Z[׎J[)^+ZVv]p/wttѿMGuK3JrUJ<=+mr}'7oLXןrE /kml RUe I$Mw~U+_{5NZt.Wy)1m b65jB%` ]ODYl) zjorW[.sxk|zm"óRKIZ"-GkjiXuv<[WB4H4ESZEqS+{wfwE;Ӭۆ666!|ohZ-> QSN/¬IܽylZ[>lIx?!OLB9ыڷqɥ#Vq7 bύ-=wuWW_6ty|s'IƎTaxOCSɬƈni˳n-?uvhtiLX䫫iᭋiY޿]5jz.t-¾zunLOZ/겗RI~_ {ٯĥn͘};}TkG5,3ldӊt\Qfާ|e8qx95$ >nuBgAv9UɵSj.5oNuF%D@8s5 Vэ,zHF6:mTG5wI͹[*Ѧ MjVʖ9 5̨Tn$B*]TaU˧ԋ%бP)؈ܤj{%ԡuO5-ĭ6ZRoDYD QR$Mrk맩"UZʩu4e{qv8RSԝTޏA e- GGWFY<|4޾ }kU:`We_IL1NT/YS&cCάCQi%J/[4Mv]~担$סlDt鷖M:M? y-kvR8Oū<]he顩288sx|ͷ~mvղZ4];Y+Sk9QZGmN;`-ISNz[D^,V-HOL0!9CO8%]X 6!8oܣZe|j8eCucp,Dr߱B͞5nݞɗWIsԗvn$ŮdSrqKkÓ9MH^^F>SN>'l跶IM-{v'NT"k-{m݀d%e vK}Jm9-_5zJ!iq&2 ߩx@(el$D'F(Z'M26t!Bk&)߮EUOjϩe ઔdCYu%W^Q._EԳ[u'nQE /]s3#5Nju:{wLJܔ}QM\fz !f.j=iC&&pOuP8rr낎Coi,+>k;\+R]*_Z*}%l!JFl8{VmBIhI'dEpx錙U7^||[P<׮>W ƱTz_ϖ"ַ)K-KU.t۫\ݖO.Sqm҈&}ʰ-{c$jۘԙzA7%~>!ljUj`ϟsIjO彫5].'Uw=y)CS&˥fN>Kw]u'^~?5?Pwqe5y5tEl:7o]羮^J>;lFewz2y-kbv$qgS2n3f.{>;Φ ^Ot͸*ʡgv<~93pm4X祻_RuKR4$:[jwbLI<|+7-oYGv靮ժv"V]Fw˟'653Er֫lVܿK>䖓uq#rOF69I3&qӻ FuVJ%x#o*MuQݨ\|s\Yn6׵׮h]sv^u6^u@pYN*3tS& n\[O.rS,O4vUSi"'&`KƸ!4X IV{-P[Rn"Zm {:k\ZDG4kC.Y}=ZW-u {k}Z9.o:$i$ߛרf_~5g #k$fk=2ħd~.>lI0 r@Y/37_[ާD"RM3 )nMD Rqz ?sKе)hе]Y/PKo܁zƐ*h2B/"_,S1}`ֳڤ}o7/p\(t$U5:oq\VR:lF=C-'*$e  K鄎v*˕D9EN2ݛ}5sTtjҸUtsŴJ~X:=Sk>uHjZKKlH?$ZpoW(s=p.dݭ0OVyKW3j&IѽWIEfRʭCcBKm *7f EgZ[Eir>~;'XuIYNkMB2&ek){zGj 0͡GW^N徰s䝞ƙn<+UTs7rզ[#YTqvU'z3O{\~UpBܛk..p˧8Sk Z*j]ZsygL7kpsWS3OY|+6Ny ˎYo;ZGU[&g5SGmnzrq믿fzF)LUx\<.mml~^ZqWyV\6IrrcI6jWIS]u][>3wzMߡN%ݿQXө2{O׻\4RpY 7瞘JpY^2Gi\V1͓7flۋR՝5xꝪnjjr\&~745>$H,[Qڏ(nt,eJM21a/EZe? rz>_;qq)jrwGVVOڶxJ%RI}Z=]7nQ,gZL=v<#su*r]̽ч72㫳mU,L*~v5dNf"l ԿS,jJre{ʅXVFsciZhӎym'g}uF@Jo=u:^-#U[Tr嗣͝aMWWRQS$_C{!<{~Gjj.:4:NV*{w4RΩi*''})7#敦&cs=#_;|vp~G_TֵE^*kR#U/8xmoqzk+rvt&|%>R5QGgLe׏ykv'' $Ou6o&ܼ~=.iFK]3J!oOѪ%;uTz*_W֩fkl ){Vjnwy*W~8ˇ=&i,wyuJG^.:Redrvν1f{W71 R-e\F}' e;z,{r<8 e^&i|ʾ*x3et_>O&;4`kf43_zs\\V0WhZ/y/Ayϓxӡ|"0-9kKg(&mKtak,9izU-fPL(VNI+VM%T!&p KeWeiK:W/˶b2wv-D$/fI۫<z*9\9@GdGlu!-5fVM6Cӫ)ģRtep"#G Ǫ{i:ojf1) ujZ_NV@CuVaj3BsPUgګ"tUtZ B܇|()Kv6ӣA r]2䚦!+@# ]K,5%+nmKU-* (i<&vsQI `"0{(dD|KeWJ:"0kZa\Tse%Ӈ'm_ƹ!<yzY{;[ħ5+gFԣJj̼o!5CKCZ͵Rc:^fUijkD/1j98eT֬8Vw֘Xm^po]%*{mœ5Ĝm5(pozr pVklTIKpI-GSe^L5ڹ8^k_cWMw9{urr Rη\/cfF{3 ׻t/dgWqȪvk9SJ*>_S]cӻN4)Io8%Btov6m\}[#J?#X՚|[p<w_m3~'jjp_v\kJuѪpm}Ӈ]=wT&5ܟ[fOZq{vɎo4}2׳zM} V5 -]'鶫ŗ 7_;m;_5e|ߖ\]toq|>' E&G%me1I+`LI-ϭzN;"8yn/C-ĭ,,B[}8x4&q\5XܒE3WC3%?:\žɟۻ'j;_yM;8ZsHpFnZ?|]SUDiț,{vUxȪٻl3]s-Cte+qԢj [] oĢnL7-$n" Um2*Ze~^W?V74Dי%D~u0'Adgبdux-zt!NA{WjR* %[OŸrZD `5V5.*Ыoil'"~03Mӎ_z_k+,xO拥*lCvݛ2q o/]g)4h9ZgB.^J4'ZcM44WjhխY׎P@ӗK`{ꑂo|[x' \56Z8y;pX@%PCŵy8_<Ӈ߻mrk孞iһl>7K4\+r#m4j\c^+$rtYĘ\|yi_YFG=J\ijYfW-OVSFU^糗v77&oj=/^ktֱ6z?MK}lvP1nµ-jjs_GpryZW/?jjG=yxg뜞O ruS7\uW}5q~K^Xo0EenU}?nlg,{hx59vawǹVd5寕fvޤ@kзoVBpiKrYVoAVc֨n*;ѣ roq~UǏUJz^+m@EDkL%ymU&D~vkesۉ;C>|vƅU1 N>+.^z|Lon;EM!krURtї>ՕHɂ:ߌYK2̚{3}ԷiYkZfҭ`YQ!2]_=9;O)?Cݑܺb泍}R[Ԣn4e\K%ǤDe肄Zʩ8] jtV:]EÆdZ%8igYKLq%Z"Tv-Օj=XMD3I7%9Ήz52vU` ۺ׻3v'r^gl78rQq>pɞ5ԝT7/#E4ԍ\nBk^ۢ%LfKv}H?Wt= (IKՔ-fY"Lܧ*2^Êl?Z/6H{N:Z6+N:1PްqE|yZzp8^D3YᲕm}Ucurևw7R~g^:NMqdc~Jמusy>;zc.>~N&7>[^ky}/' 4BUcԯ\s%.ӭz@M%[f6צY4~?#rXOU_⟭ ]eJ4ګEF~p˕7 3o+\}ꭱ?-Vvn[yk=5gߑ:q5Vkh]ds۝vf^5U^Re_'L?}'~+yԥifvqJRr{Z̿vIBP\M8l^6VŴzvnk؈FrMzz3{evUR2<\/ݩdeym8|N֯kzuzׇf{{txZߏ,,תzỴt'8GSVYM~|*bOO)XE^Yj+%-XYyӦ%o^:&W5:89{[ci8\M䯓WfTie {w%s䣯WxUq ƻrUIR=تWLRKfѧ=h;w7 3}Ҹrk5ikĒo]SIj[Y+y>(A- ߀S{TJQ%IVkBmRó9_0}zm:{isET4]IseF i)9LQS U3ų2Vdmz9]gEi4Ev=!Y鎬Hw%;.vD…osEU돑g^u"7 IT:>`6SVHwn{^ކU.:(^rBEU˘r͞|~N(_sJMVN+w=7y'MWк9~WY/zzZRJu՗& %&jmMY]y^s7~k>-ߑgtM8K>7*4\w^vx-W3z|__'%ϵQW頳žsOz߷8_gm;x?]eeG7v꽏FY&e_'glO7Ɣ}M]3޼?#׍MSge&u=No-&pR:lf%okZ^ӋƷ,][]g$u_Zyj]sN~N)J,S;qx)fˬޮ~~ETާ\_+5oq!k]|q<|6tm~y~?%uR~gyzN r6ݞ)ZW2mĜgm?򹼶Y -.(j*Ko:\΢@q0"WFJrԙ4P ӎT-dxZP<ӏ-ڭ.c^<ƌ?/G[^Av% ߕ:Ez>]NddElGk^~V/p;<5/G3צmfb nZc>x_?L@ UYCg5:?ǾM$/Ǯ#>}?#<[gsc._-Jꌫ~+M\3u/Tס[S˿'ʽS}]<~3}ݢ;$V4hը*Kr$ۦ1VޏB7~m{6`SOy|^wZ=|/:<պuUukjW`Xm%eǛO枉r>=k'yG/%pgcԣdI=It;0\oE#[W43y/]YUvV[ؑ9_㽽|}["ɝ5Q哜FQ]e? (.fT' v\O%ϓ+N>gL:_\v>dᲾ'W_e;6K3^'ǟep?e~lڪvz%/yN)~rwy-'Uڪq/Nv?$x/(O {3_\VhOGmZ)S{ۢr),%[G/kQavHv϶ӧb;ɥ| &:N^>o>QZ=: CsXm>L8|ק*K+Xgۋk/_|W@^O9˓y}ҡ uG/FVKa ,gCZdjTyІU@ry wc~1Dafq2k{S5yJ;x])mCV:8OUvtJ:MZ` 8y;hN-^_ũ}d+nuY<SLiq~cp@AA:|>^Xm9&ͥ-Yr/7\3x]5m%PBI|L( @QCw CMIjOHGn+^2i37/w.^?)؜k5ٮ$鿛UX~_mQ_:]iI/%|{;q&&+f?kx^쳳&n}tNWSZ忁f&p??t 326\iuz<*q/u~6i5^mǓ8fFl^ ӓ5ڢmng^ҦvÓ\ΒuX_znNe7S|j%~/o'C{s^n>^/izkƽ_+]q8j7/\[-,j+Ҿw:ի{d~DW>̙zޗuCaGJ(%9NJvӃfN[~&Xu2X1l-Y)d3؟QB !3LRl2!@"?F@oyQ2KczmעAPǞŷx+Nt3a[ ;N5ђ25R+"X[oGm-[Zs[7GMvwBjYh"϶G\ʸghQ&Z&J{rP_=+bddzdweDPufBӏ_Ж[=}sWr۝NC;n:or'=O_5{ Vokunq"%d#"[LI ~ JL]$8#R oDEܳnB0%{>j{VjyoY],|guϧG <n'Uz$YwUbq(k"_K׮^++\[V2sW-/:7]e9lYLKwg,s^I=5oKsٟo^Y'0)?{כM?l&3RSݧ5g5M7 Aikf%yOz+w7|r[iWҩ'8rF1+8x$W6U<[qk;GS,_&Q39z˭h|.\/]O 'wtj_wlǟi4=x}@EZ)U^Kȷ%xV7M8۬܁˟PpL͖zz(9oXnJLʳ,kԮz:B2U!D`HC$CNm"'Mi@&%]M|gG@ƄrJjDQ NWĨ$56?7ܿh\azhMkۺ }8x%F`&Zd$+~52lsxסw#Sl_Eku{m:NN[] %)gpk?:&iw1= ԝ3v\-Ϛgioy^IX.ER|= P^ l`SDIV7VKYL (Pr)GF\'[[UYC&_;clGO Veo')KҷQdr-ӃiM[I~+rV\91n~ŧ寧ݡ%TBv;zWe2m篭5nRq~o_[:9my]Ǣy^+wHyz"ݴcʻѻ:9- U~ɧ<+qFGڪvgyzgM_gE ~M/ewȔG_>4,N>Z:~4Ĺۏlz:J>&ܞ/ }Q?lgXi~1期~-×|m}I8[3+ێݶPĎN[r]/)-噿O,O,[tqyΟ8x/ipo'JVUj(Hra'Iay7u8m)Z^ rN./pv[J-uVPԯS/J\kFpXegǤs~6ݟM.|w&=죒пHwOc2uzom׻Sŗv[^ĺ. x}o7N%c^峷#zNekmTxvoQqolc͓Ut{sWOuf.ͷrʒey]hJm.:xNKlV)I79n.n]M:+Jӫ8ynkO8{]͛o_no<9_?s[`5q$T9*GN>-3<I;YZq_ζkܜ{7f?߯7bxG;SGH9&n-[؞U_κy4AٚD.-ܽxmܲj{z8l|N>NN.*[7-eI6֬ߕ^nUcQ{Uߏ8~ڣ՚pqg3UN:UFmXKL/77ܲ\MenWwwE[=998g=%>HHxK&onⶻR?Ɍ%\m~NND)JZU{XfԘ|_y$0-@/ce0V~(h&L' huD~UkЖIc%ZK]IҳOV+$>hIИQ-gmLi+;Iϩ[M(f"eկ1U2]em]lu*n}2vcrv>,痁kwYԃ7(u"pYfJNʪUzo mVz>2n猝jIfvi-Yrv&S*#_m1~׭ΚH3?%\y8%{{[77^f51}>^=n._'Ov\Zp)V[eZUM--_Gmov?NEgi,U%$د7UWY_Sz#^]7Vq믗÷gPm%/ emYmy_s_K:gWƗv)&TlΔR(Ey)G^4䓚o{y'_ś:=NW)G'fEn_ț׬l~GM/NES淃Ofu`%xtӦYyk]Q֯ vkty>O/'ӣ>JrW=Q.zI-^Œro-]6 jQĭt13(ɭ^rG+=I` EЙoB5K$F==|H]4$Y(Q&Dzy4{.;H$$# }>%!C!%4y _DB,*Z>ro_2w@4--.rC2mq|ܜwRv`ZhR HD+6Juh,2P ҞB,Zg$Uūni9+[uOjNv%9̇yem-GOv{7U[Y7C/!]k~JܳI5,8TZ(ٴT} Iv6C= xtsCsn9>$W嗥rKq-&lwFfyͶο7l֕g97Z@m^?F͢cҲ--^{8?NO=vrێi*uLp^uţL_9;\5=N w^5_غ8skU|jqCZU;5#ì=*s7_do_w14׷|>G䬯~mV5z_u"G&sLM4ז;cে'k˥%l֏(MJ[x漓i:o?4$5Fw닁PW>%YBGAOuz{)Ò5 /F&dypMĿ؂2FW3WvثmZ%s1;EYtΑvQk;_KnC{Ne'ЖEOBEOS"f[l% ,K=S1q#镀ҀUkDq_-_%UƵy~f:i]HⵝYP` 9|ҵ+xH%uۋi!~[B*O' oŬqd}}}3;Y{˅)ωkm|UvgΕ_zht&ͽۭoӴAxo̹|>9K뷦/5m6 -my_ۗV>w%mחȧ>~\Ӌgc^U:YheW|Z{%c} VӥowMy'ӶoxB BeM__S̈́O.:ؙDVT^}̑iɹ![NcMKF7O&:hr؃D%tеbs8ҕ}ވEIkMr ZTYb`ɓ"BoR%tu=G̈p3^^+Vs;|Ph3=^53|7i }?i_skҫFO{"cYiN UNU[aWX:μkCZqyjm*ۡF\KƗԿS2{Q0ƜIv%m-9HݝHoapdӏxs~BXPƵ=UjDuPo򪿵fLLvGwwwr*qW<o{Y eTOGw^8ZϖkW3^~g=5˳U/'#ilV/CO+Q~:9t-cWa9mo"!oqko528hիod[pDFs%ro;ȒMu:֯xc~/%fwl"Y:鶷]eBuX:SVI-x$876x Kyk!rZ=&Z̾q$vO{g^jɩrri4k0}1-4e7抉 k H!>k g?*[Qu9ǰ^.܇gÅ5{QY٨}04uWm-- uOfPoeg F^L4iU.cGiO_؎]Lko2mN5D[,SLtg'lL=HKݻ,]DN}"j~D6ԳrAt2ҫ1M qLkumUKp77R~Kxt__|Yo}YaCIPTY8 H@5swC?I5TMMwfruNTI!7r:4Zܓ9֔WMN]֭ޜtھ%+'GM8]lOI~Muw]V؝识6ϡ M'Wo]@ɿ&: 'إ6%׹{5-jʷ8 8y!ԄօU|3'_[k}?ԅvPzM~6kZJ_~N"l9} >N)܊%5u9,R:sw)%qK]JKFJTYԆGKӡjVUw^^4nt 5,DJVU\FFwDdDY$&$|զ5AlƎժ8]N^_&qǧߒrMW{腛o.HН2&Q=Ȭu'PSхv=MjԺO|h_qJs2v  KʹhV;sswOFLΏ@N o^e_o`GoZ>K/c任rqU閿c3o}O@i/EȸMΪU*}Kz׉BU6㮾?)O뾫ܹ"]Ӿ/?ƚ%QrVѼFu_ٽ׶@iIҞ/ht{we) \u[^~_ơ}8]s6vYЖ Hȏ*1Ր!=kl]$M1vd!{[b,U-ip]6hZcg!/M-I|Z&OLݚ_ݝm'@T܂SP ]7^z~*\3GyUv>w-q_ Z3w[*@Tرۏ'6MCZL?58\}DZ ='oRbSA .}(lDW*=Iio"}gCZ<Zz",W ELJkdjf`47)X2(ZxNGMilsֽSR}Q mOnվ%ڊQjެLIlkZ7J[۪"kj`ahq #ﻶdkrͻ_sނ3aJi/R$Ʌ[-iN(* Jw(%,B P!mZG~.;r[|_Dtpx]cduV75qiUZtPmF@ϺSop^Tͽ{rgk;=^YM5Zk}Zq}|ܜ/ M9lk-Rǹ4w饾Om-ARvA)40OSZUᘛK1F|VNml[z~u*WD~r˘CSe udeڣAOe*}d2$=4 qk>|wMbɬ$uev%q99y\Z2m^e98ǡm_ S{LDgZ5:%I(X@zZ֫ogȩ_W{wiX3nlݙ.} =$>&n9(:XJ8GK,iL_a5ɽnDD.Wxܽ%PÜ%t*g&~[ߠ䧍waS2u~ĻդH4ȠOS\  W5'kheXze#4ԭ_tu־і+oі/-eU,^WYG;.lUzmm`vHP4|Bx(3N]JJ^jplR~s}tqp ?s;mRٳsO̽-.6ڀk^= \٘"܋>[[Зl"jTcj܎'&DMj5r=z֚,~ub\ Z][+B)WWkY(&jMV*ӴtԐ ˚%Ck6சj/WW8ZJjV!UΫR~snki[An'8S;$@亳ZI5Xsl6R~ Q'!ҲUrff񡢴<r--݄uݚQKI|YY:(k3`I(@&; JΛRu&I#4ԆRo#A8s -FqGI}әye7v\JY$ŲwQRe^Q}[h˩:\lDK`oI&}6-*eB-ܑp [E!V乐Y%%̒/Y/v|JjJMDVl>9IWUs?Up5Ձ t}PB} VE}-YYmy)LW}Yk 4%qmM eXSZm@څk=\vOIDclc[^*=˄iVk6iJSS~/$}9,m-fvIoYL:^{4?%?RמpRz=$תez|uXq4ح8fۉKhfJWWLuOaQ)tFRtG5:A߃VdDxj)^*s5$'*AQhӠWi]p% ꂌ,U#5V0d3"b=WD2{rDg-I,*j=mU:0 3ѓk'$:=͞|p+35D[aΪ;'=DDMe-NDTY6&ZřkBɻJz7-}6KNSl_GOQ ^6H:H95޶x.['3>|RCBe$5"e0K_92G]42yere9N_xl %KJ95H(\"jy.vfkA>FQ] %rR*A)pCDB/E9HحW$&5qu_ru\@*)fY6vjjQ2N7"Y1n;Z`qU9؊73dPk g'SӲ3˵ FB9"fx `4rW/+fɬ,`ʬ'5v =Xv3wV9Q7nS酉z3qcjν Y#}dPD4 n=#r;T D0~վmTh+T[ߑdM&7dj\ D)dy&B WW4ժRxݦ{agzFetjfz50\vOsǹԴF|usԽj:aI$' bUwj5%:\iIh?J[`-=-Z$*z6㌥ˊ A؟W?*~e+UBOcє;{I*յk1 w+4NRkFbĿm_i\/oȨ]DYoDqoOQ؝mRKvKA˿QJ)]H.Ko s:U^NzR_v\ⱟt]u MGP"'hʗuV36-HS rۻ$ 9c6#I9gd;H"$/BSQj΄Zđ;2QD5KQ Л ]Ju;gQ lD2RD([*g=3\EJ3mF>!k(-m92F%"{sBljfAuWиI%ztrY„*է%M9)p_TL?pixBMd|MZL綹,FNYeE*;FdmHhrJ ׹OS4̗sfa|Ny,S:"VI'4GCQ)Z{OrYէ:x(С-\Yd_R5~,],k휲0J\pe54r$a5C\_x}d܋׺-v*"KMJJL:Д$iƭt䏪 tI.ס`BU-WYl @O}P9+: YGYn:7sFVS{'!v<o6)llh5M prZ!%^ԙ/E?NvbjjYh"r:~eˍγ3ɈǹOjE8w9R71sY~F-:}O (rBȿ㟺%׫+%QjlzR{mX$q/aEhYz?Bs;5u^f@1Mo=M2n\>K\D~x&PvRLȪDB(M!j ;c[dE̎G][xKULY{Du 'pi4+eFY'Uf[T,HI&#L+Wݱ^.ڽw%2tYՐb"eV %8Z=],~G#Wj]N~k+Y5JSZ WBkU+WǠp$(-0UBRvoz4qRS__Vӯ߰ؒBJ{T[[ 9l^5XzWjmIݺK#kQK!NʫVڢu{*`I(1oU~f,#@+n:J~ [A>C0,-&Cܟs,o#T %ԙЫm@ЫԈlllA\,,:! ȉt"IĐQ |[8 kZ&0`Bnw,u+n*+ UqV{~N 4' ZC1_/۪GMiZ蠐T  @̬ڽ9%Њ-(cC2u&-Q=DDCo na]J:UCz>$QK\ьq~I}ȘփDyο hԣWnWi=nZgneK;5%:*}j e$UZRL-elSo J͜#ss5Y7 O%辕Ҽ+S^*W(KV^_șU+JW)Kd 4/swZ4OcextS傀)H$JMO$0  J$ 3Ҍk#bN :=8˴ h5QYL^+6Ze I)!>ҹh/WT_}E  ,*Z2EV-ۊfۏЯTb=z = q:1+$!o=W5^QJ=^ H]d/ꏚf\O{~U0>Gv(+)Oh*]Mۻ2!5X!u |dp]̞V*մ4W?-_Sl/X+U3CV~ ؊ֺI:i:g܉zjBiBܧufhJN⍁GwwWtrѻ'S9Tƥ*Riȹo-Dӊ]ӎײ-wGDER* %-)ޡBx~x)֖V,!PV坻_~oO m-J;=QnY;uLVeH܆Ǚ!Σ(kƛœ%YUe5AzZ3/j,YQӕSԥTX(6~\WmVU~`Te]+ku!^VcRSoC5RKƈ%ǩoE>Ϲ3jYYzuȔz 2cS;痍t4"鵍I$YrZ= {g$_Q-X*ײ.3i }R3Dϡ5hcԫVLeBd׆2r‚r$nu$NWR,ZFs[_ɔV+[a^;'̿o}19dkzk\V-kPʄLj۶㊽)^K?Bnn+%QM1ֱ$(I ʴF||m{5سIHn#܊Rgέ -կd۷@3voس{(.OG/*h#C;&p 2&2WzɭĵlƛߎIڝKQ4]Qq –{dZiE?7lvЮH3Y_J3TIZ2!jJm9O|2lz06զFm@_(ʗ"խ3oi4gmswG>7BKۍ2ȿt5c*kJw/Q *VYnnsk] '-9f}?}+O<ԫm=#ǵVcԷdl"|Nз/$}S{hrrqƣ>5ưle:ԞO6P,%R1V2FZuz0+KU=rmZz4g3Vo)<\m|S'sxn 7ڶS_mj6E'B TGb$_aWZQRL3\PغSH,OE7n\zz 'ێtfmY8g@3ts&m:.cCza@'*Vpr],h N-L1\w\`Sm@.'gމոRp˧s\@# GezjE`n[tޤC ףIZJ+doQo_z< UW~#Bؒ)bHnWWphssO:>Dn}M_ qWI[] Rvj(Z#*rq:YIP%j\i%Ʒe2q(g9(\S7jgIo(5W kr](A/běB%Q,ELofz :Iϩ-dT%%%m~s %Tpx; [-jTiWώJz5Un긝Q o` 0B-U ¢j[WHd|[C xݮ̓ki\#jˮu(0Fg{j)?Z] <̪4ٝWs8zp=v:q+@Iv꫑]OkO29Gۯu/rI喴$ 4eG^K˝ h9񝚫t\ךu֛%= vk}6ʏEO#jim4|8鱃\֭,g~;$ ],WZKw[#jȲUbAY{߅Yf|N*Vk}֖a^:8W_PJ oE9-mT#,mnP%mH DdUe +ܲڎ'pZk ON2U+ة2&0L'\~oS=9eDhQ~?J7ʺqƅN[Je*k ɽuZͼ :$VɲJ,^51w}V@ezdw)!0SҙV7%}R-+>d{nZϱV؂QR t@OsVjއKuz=fv9r3RMzeBm:y;Fw5h=t!R}DtVSNyeV:Ơ*}uU&jp{EXPpB[=7JsJϵ5O,>k%~Rn֝u_ǡJӽ2M|JΊ6UQr؇N^m>PIKVgwdk\Q΃GUݎ^>dU[/C$9}_j0:*XK v8-nx:x診b\ v\YUK1/ri,IgŐHΈ!C@kB>@ κarZrtx򧡭-#pP )/mU , v#+`(O"2~bif*}- i r-~=(YAL(JԀ|IoJ- n^RVsilMS&digA@H'f,Mjzzc1QFk%ꢗj^Zo/ْܗk J.jBMD-5a K$A&{Q (9,C)[cNG^':QÖfX =59P×ЉI'?Wgޞ-jnmSދ;4+.ɿ8"ssWߓEb9yUnEVZcR]8RܽJyI\i4'sl6~J>ʨŖen6SJ)]U^ܥgeJ^mo-nGmiT2jеlQQUWUZ/Z^߶fuS{ʩUo"tqhprZ(5{{^Īo^r&PGYg"Na#U"}Ȍ;CDz  up'r$UV#|s"@u$~=QE>lLB@B$a!)\-Ӡ^-)ס(Џ\>6.&q\K,rAԫ{hة5"B,afې C'c"[+ 8 aI!p]_m̞diE>=׭/6ߨRLxkbdo[Ge[vn1CR F *0vv] %4λ;q)O/%V!IeRzvOR0BЗ OM{LC^;:4~=-1꿋k& JM4mW:FTeYe,*Ӥsj/?j]i'HYF܋SViCJ7iRgr4>z+}՟E-]N~ZKѦrtrOuv][㪧mv݁z&V茪/uo5ja"Pש!*0΂/^/c|lE3 z0 Aˀev esxϹ莣> SCJ;^#v2!u'%'K#VZpZFiZU\I`5 7 &ݧ$Ւt*dUybM^o5w쟡WhŚ- LeJy@ N"ӌ$`gf9kr/G6VѶ O9rfǍi%2կT]|}=/z׻]7e+/LG~ح~/ԡ.Bpݐs{me2V)I Qtzԛ9.TiBHO7w+mB{-]cM[r]6;NkN7uhlf UD%_ba}SzhD;jZi&/RY6Eg=HM9$N͠8OG%y 5ܜϣ0"swFu]We?ҕ"VsUXOrE읰xܞEmLFƬ_;INN;֏9n)bC^A^7XkX;o#]NzҷmۊCR#I3רpoejV}[[pn&q`sw(lg?=e^jg',2$rk5eu595 F`:7-nƓBqG dw(:y_9ĤqH4n[^ QcUvxз;|ټ(.B(=}Q>|Z`G9=dJ8ISwP8o K'-+["Fμq^4 L ^+ d˜ɂ %&mbݿ=eJ= 0ɛ,,j5X7m?䊯I%!\:%YY(RəK[9в)kR)-`/B;V?Ȟ-T3jLeV&6n3ڰdIs2 m*ܲ2$@,]1(P5Pc7sUYKP"kf$fثVENiR6o ~N;+ɇ'\JxwϹum -ƻVDc @.^9k0s܎cJZ0 d5(.^?XihJ:~ 7oOɔȵks|w;*ylsIkT*橝Eg^<%s6ۗloܻ5^k C^ VQe(VtzΊ۾y*ݸ퇗_Z܉ZҾϬ峪WZ'b[us#j4K+LE(^ٻvu]79۴qVCRjq޼&Y2:謫DRff%ᐪjZ`^%7OjV;Vf3Ό[і|F|y,M9/g&O'%L!V8l.s@hZ ZSD:&bQjeZllѬE~_Uu^FlI/C [ (ʝJVħZ:V*ɨ|9aiB6iLo!qO /xVv*B lTQ|}*ͩW4QԃZtddR^M Q/S*VuLbWĪvKJ::uݺ4f5u5;%˺4 zNj.֝YS$1jv N#_n. 0Z6fbyU6vU:ԲtPER]ͯbKzU yxvl5&`pvvۊ:N5FChy4fɔG^*—ŕkE[oR$i@Ȼze{ݯ:Ӈ&V;yuX/ ܫpeը9cmq'BO"XVrhQv% {]@zhM+gkWW^ͯ7mR|ٍ749yEMbYVpBJ%cNmSRfx}lLI% @:0v}sԵ\4zZFgkp 췍W.8`džÂ:^;(+J-7,jqZ2_GI10 J\i'̋>S"V_Bp{&IsvvUyX& Dƌ͋!VW}K)O,ә%(xr@k_#^])TK nMYtWc)Ŏ.W_2՝5ůҿ9~t#[.tӎ-٘-(>rDsYԾ {G9 k[,Vz2FĴE]ދq- {Iff>MOO&Ҝ=HO 6y.s׻ 8/ȟB^G:<̨󡿔ZB1+=lcN5U='SCT KPvhjߴ(OSjI{wYzUJM7fMWuB80pW2hX@NAޟ0 Ve {isLa&hǭwXk 7k;=^JuoO5s=Ik'uy\Yl/{2KWV mVmŞ#;գOܽ>?GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG))4&4?((?G?5?GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG"|!1AQ"2aqBR#3br4$CSs5 ?Q )pgyƦJ?`{\8ݗ6GS L|_erNZI/;wm^gWZӃ0[6oM[跶e `Rׂ0Q˾(Iyj}aY4lFh,*Z]+@ JUN4Hz2WenJ^+C;/wrψxX*m˵@rB?ڈ*>sYc Y;ki73MǗ>(VꛃߩM._9l\v|Z\ .ES+OJrq5J([;2fӈx.NzK6%QtiruF±N\aFC˫ݪPGϜZ#%Kܭuؔ IZ,tu ~u' kMQ5GW^~^ TLV$_"l]RZq׉a}5O|r %uǖUvm3zx|މ >j\-r܄|%m>7g\]n(G+$e8;=5UU' phll93XmȎ=~GQR\S=;> wSӌ_TOn{N? ~e-xCă0QGEяMu"F?OK2)bkH.pka_U .ȩu\v歭P%@aHAh_i.``vL֕2"MKmxtBm"N[сad,k*KZwwh#xz{c^3՛(.-=Z)@#{i$B,RmEjZ]68q^ůYz̕@ax3 O|k8K^reP 9jXr[+?Kx ,]O\ǗJP}dd4n?+{6?rk̳U+up3MQū<*()jFo'lY[^`v m,6m+ \DFݬɗÀ6t<TrVG^IM;l^s 'rؾQޫ/g >R6dkkKVYµ+U^iD鄴Z# vU VJKls,:bP"e&(sԴY)NOPZ#E¸ŽZK^vY=uofKE+[ 2-s,q4y-rvJ^V (ߵiȦ3Z~uRin5A@k?j3!cסEڿL;ܺ@R'9sgb[5фE8ke%CrQ\ ,eR~`u2` 2yqM@9sRtM5SZ(2ǽeu<]YgP%me9%fHDz>uK̹*iŰcIۯе%>/12ܬuͮzws.qO'rEQI.jpƊ`s])鮈''Ͳߺ.BHmɮV.'V.;o^!c'ZkdY1qq.dnG؇\@Ub|`lS(ؔwi&ދi ׵W%8NJ=em䦤s ݲG]_Glس]tX )G" ]FMj ϹqQ#*=:_|KFֺ-sR^OV;> rf=c85F oY>w#aJ{R2i߂-%%Ajp(Ǔ>USmɣ]Et~RAmUe߫R6K=XXYi/G]rօj[1mӣЮNCԚ4$D&+`&Spğ LWP'YfpW֪`.QGv>s`Hg5'G%+٧#qVg)Z8O^g|]8Z4M͋UBZ0jՁ"j>z#mtyگ?̖%|@qEjrfd[6e[(-$LW^ [6Rz(˓'oŲ۶y+[(IO9W7`V.$=IktZ3]x[]6J<-=V@6fM> vlGLy|KZ@Ln\Yt!SO_'4Y8MvK̾Z4CZQڹπLd9gE m[W&Il#5 jY6.4jBaB趵_\a)-@;TOMJ-K\آ@UyӧzקS@l8Ŵx2@I^ an5YuE =b`}([VҳaNm&߉ aLR6r2qU ُur5_&Rrz,_x(<Bw{?K}*2SZG)̺ɯBZR/v'dz Kƿڿ2PK3kO ӴucgYoxueIhzKN7.REF?&EJdɛIExwf?<zz/p%u`B=Q#^1ӎB {Ww>vo笗PP=i3 X]7=57.٤z<^2UeUa3JuXחWtXFBdlu.i-W# |kj2M?Ojs6d˓V*Ӹ,:E&|l L۞#՞@᭲-{4Sz0ޅ r߾R\йgQ9|DF|cF/zǂmS&mn0yvnf-`kyTq{*(Z'*˻xf35RF[-ܬh_GHm8Dʕ]> Y}wya$] cı)i>ʩ[-摧'tU~o^k4tz͹|ݳkRNTN\[pXV'ZzQ]fR Օ(PT{rװOr___%vcc'q-[-䗏Bu4׺K^ݜk a=Vqi}oMOߎKe-x#1+VZ6뗛|ѶlmHhKNE˞P8w8qqĦ_fDz9Yȱ|p384a);8t,gݒiS'w˝?n˟L|S)lnPJ1\;w+g2)A"pny>ӊǠMb9r)=moG q:recØ w/'f@cCBoУN'P_ f+VLXqi-hb1ZiqfNLg_nt+"4&^_bZ5ͶnÖV3r)KTfOG \ir<)dj?D k^wn dUMG<NI.v?àr 4F11Z՝@n1Χ>q+ۖ7'%~Ձa)l ح)Xԑ`/Yˈ_hӖݏ~ aƶF۷O=vKoj4Dçئ5.?3QRZIjl}iا枫 e#ǩ2HFׁ SSjw!cC=Sǩ͹Kg,?>%ӏ̵Ew>%E~]d⛊l 2$6߬ܢ:ʭ2SѠ.[ex-r$}tYk|,_0.fJƩϙDɞDevÞ]iW=JFZ2q:W?O8KL`FEʊ7TXlvl~2ɷл 6s\5(XJۏ*/ {^pgu#sTWִEǩӍWT-[fDa_r洉Vƪt{Mqkg.vCO8Jvp_ǰP9ZO"F#1גoĔTS<]ܻ~6 k\I$F}ĿpL%'2ʥ] W^D4zI07'[mG_"9[wWFˇc_-IEe3#q9j?vzv<ۉ^PcsR%1w{}]hz֐"ZNg7 Kd2R@=Ucl@t+w \"Rix.\271N\|{uyljRkU@ą2.a S؟<4vc'SԸvrD_Hmk")/gc̏e`9a9|Y\۽;nŎ[eڽ'| j%%џDd#5 dqr|Edj>W2GrTJ+E8l[2eZՁm[TeRq5^E\\u_kfq_Oo:b酎ei~ Yt{⼚3%GQ#ͫUȃ}JcKv)tZ4sF6[S)Ir"\*zj, +^h=`@UzeM?,6٨M8w^lcmTNפea+XT+]I >p֜ 읊e vkzz6À`Hj[:&vq?Wqh^ne*=.rk~_ZIjJJ=WP"lT4ϡg58/;E<~7(a=S}6Դ׎ ՓfLr.;OO)nߖmSɁMN*K=5]^%|=rvli",. 9e'& M}^ fP_V.[_F4ʞ,[v{ޚv@elS?`XpJ3jE|Ϟ}bmSm-@xipZW1%%iaW9:>,,=ݳO#wǴ2b 7;؈,wtat^r)ǪNR\ʵbWc"\vtq$h4ABr(S̀,.RKEfyWuZ2 ds}mx=X\Yhɯ& pd FJkTz0AvU6*[팔z8&xl8z|4mǫ;RKd)('''&s,܄$sgK.J8@VcJ M5ܓШ]ZHGmٱ˯XH-[Zr=Ɇ4|7%[X;3!c#ڎ0U=J7F >r7ϧ̡tCvyD8"( fřf\O:ǺTMN<Ǻ7֬&&'5\\H̤|N79dۇ ryR Dqb~,jT=ޓ5m]bIVZ2UwF|x?Sx=fڗ^vߛKԎ*I⌑aIqBE5%R.|o{U<ׇd|,8wi#Tqs#nWȳb׋/@١+\tf[13>*KCj^h{|ړ׋gw|ӇhʚisG.f@m˒*[J|89)nT$m*TNFߚRKԊՋf,zkx WiA7 )-bLVi>qЄwQ?f~=p+[ڴ\R_D⌜{|)%dcM- nz9$_3f\~:M>M,.%W}s n2,~M kvb>dQ˧krrxw% -eý-8vPh:oN'n fLka-̀mѪ.MuѦs.~[ʵW͗ybB;v}/zd$n=R'Wxdv.PNlۇ/j~~ҁe,S2'vZnx+'v*#emGfG 6]w-9!543a9RIq\t|&9}y SkϧRXwGV֬2'lzYFkzD݁ה~Y,(v^ nb)7KUO;+fG̕u? <\hcAB YӒ\$Blgm@oޗ?rly4Iq\mU~4W$Onr싖7q"RK_z׵?#WIoY3P:b8[ENտ-;Ӌ ^g)< ۝( SMTE7%B&ֽ$6?t @;g7l#l3wROV oYwG|Np[D9/g 8/\ZiA| {_z|q}데2M|ʮSRt 6g}ue$yƯ_7s^%ɾln;|c=Ro@ o~2< ~T픟=Y9!+ ݧ+خ|5_2rsnO;0(N'Z=?meW&tmV'W 62Əd[kt[d5=:E1)qEجEPT^7K&i&Yxr^:xWzf˥0U֢$GMisOuz:+N/lǗ6Df)Bs&J]MiF"_=v^*sח=\IRPL62?tvqVd;Tk@x\tRȥu8#z }NwIrcm-q?^=ua+*s؀ng:ȇwC8s3˖~^SldY%r#@_3ɶ@߬MWjWIM"Tz'6_"/ZY$Y+MWd'"niMrՁ͑V<,L]r]Y=FN IphE]Y(-һ8O' lv9{_i-Ϳo%vˣk@'zdb߂?t̍4"pjǔH f&׉1T}p hFn5mho*8Vڋ6}Y\+||0|90Ə}SKc7ח^\Tgӑ QM' [\8LyB&o$́8ꑼcqr#[QrɗtJyQ@6_da˹j;69AGjŠk_>}1r>CDzU:`c^FmޡDQ3f:U?D\6:|mNvh@y:k/zW#mYv>\YwQ-o#;8e% 6f[yc)^Y(*+H [5fɂ_x|Qqz> ,[*\]BW(YkCv'/Kэf4z2~ Qŷ}rDqdQ|˫!k\gTgI2/>(Kib\;Rhʪ K_&/902G{|Fv7칲ݱS ʏ6_!:sDzqν\snfM.rQ\.ĻqW6Z=| ~5^Q)(o@=v8'Ό~o"64נQS}xMlrw^!KgPꞠX z ̽Zx j`|qmˉiv[xIEj|/F\ywx*򣤗dc1>(k^`|Ӑ.ٛEYh%*8c?:s$LJOޒ_0=n~5is?@ϣߢP֏FImY?Oz}%ĽmK&GDuv/R]Z, \o;,e_s0Ғ@|i9V$zZ拭JwH&Lfmgś9'TvxYWgS '-z)wcDw^`uoOi(W#ݓt1ǫ%}ʰ*Q$p"֯U,Kʛ`O'\l]Zf-{t4'JMT' sG\<8e''c'˅ k@Yw Rex 듄' ;2KTzVsG)w+Rqѣ'fVZ-%ٸbKIq7c+UǛ>LhB< aߒKȰI.R^ j *@W)ŞRrz.dEEv? ]/~">ds>>de׉Cž-Iy_&_F8Is@Ŗ- N-5_}*sZ?);ŘV|Mk_9?j8t[kYNi<oʫTi~qdJbRdY /E.M%͒<|.i#ܤ~'}^##?v?"1nL$R̊%Ddi&q -zMz%g8[?$jBrVXܲQ_4;V\ȝb+H/S|$򯓎Ϛ{n]a@uSE5^7.cQY+*jMn~K?pfՍg8;*K=/+T2#mW/nq\[Gm}d$w_on4 }nBo-H쒂'{ylU6\K͓D.<dm\;ݔv)dP,`4D/֩XsӜ_&_ ȃ֨tfb[>F{"+x.UF`NEJk 듋枇Wyo@ # ܧ fIO?mlG\B  * $6ܷr\{OUB_žkDn2qє+ 듃c*Vx9ǵNkl|oKK_VOZkT9q*Zuǟ[só v:[⎿ծOw}̦ 4㩳cm0V늲)mp0wF+%Z| -ovǻ}ͻqr}|"e@/]b u=UQMuMQorՒk7;bߛG3f5M>Hwmܖш,|@;9?MNZ3@vc]zxoWF$nDTq_Sٰ,sG?2Ė nk˯p-X-YM[*`eDi*yWޗ2|bkU<\k]Z = XFUKi| 8{mԷz/n۳9imܹZ ֲBpNJ&iRUOբx'S7L8bXk^%oNdVQnO>O8@KOU+iY5vT82T= xO?>-yhϝKh]j^'۷*iiԻB* EpH 2]S4͆ ILIhORz ]ZdE;#AnE> Wc0,@ -цZz'pޕ죯6L픗Y3@mh{ȯդćZA[ţ떬>FEyuK)dAy%̮t$qK|nVy~dftcGT'JkZAU'告Mԍk"hܽ7cpׯ.5{U?ȕɵS\#lb\dU\@AauzrDň닺K|o7Dz|rG ƜW7ZS;fcdCqrVH2ݲQKZ' v֭%kqqZEJ%Zz54쓔|<k]r>$^{z.X)E"S|Ξ$h 4cG" rf9s?sTO_ϟ$ݾYs#L\ydثRzp]q*1Z${YM4$m3U׈gbş`(seWnprEzۧkr`Odo|*Z/CݛuYɜ)j-*NOtcٓ.֥=d܉jKH%tI--;I3̤|rzi>D:6-,FtggT>Ieei ,OU87 H^6$VOK'g} Q@Q9)qIOM91e*x\qQ\SF6D2`L0=oN,m;.cOnprʦ~}(WgtHy)E-S<zf\6 =]lyQG;#D'ÁjBN8'ԹOvw9>VO ;^NOHm3'<*#}_P+TlWY5 W%6cܵK b&mx% ܴM8:D^Q~O6)\#`R!Lge{VLGOx#I#JITC׬6MvֻQ#7yvKQo {j?s+xt, NˇIyGE$[͊]e*25j]8+=F.MEse.K TNK1}}j2W@6W\<\*e$Tp7}IͻuYrp@& jdg)jV27 WDYw|IB1g5pÒ\d*fjcgy3Ma`|/ێRIr&]n_ #8Ks]MƊrkk &oCoo +2EܕQZ0X£DmSmȗ%7[;(kduj=njY|mO^(=bǗ߷u[oq{W.q*GѮ7I>L%, @2 ;z5๑l,kRx.Y{%W?m#:>? +ӄCU$cج4{ uZur\kZ @`r͵SZ4Z\}kxvԤi%o"Xo ڌ#Y mJ)8AjUӦ]z25kVF_ި|.YwVɏW=|)Ȯ$o`Qǃ^;'p?JZs6||^Ǿ-ج""QpzIh͘:,> 4\ T]ଏ)#hiIhgrswAxӄ}Z2ٲU{s> ky/ݯԗT4ҁT7yEzBԚ|P0ދVdT!R $d8GSMB(% "R7L(ʮO œ8zXA.8s}v.-T<3 Ⱦ)=]Qd&Ͱ,?yn_'66mm}é'{ԻWRRrz.q1ѱ=OTz^?h流]&>[R"pu-`%!(Dz~[6ٛ˗>smS]Z4Z(^k[C&O5qkE=rE?綼ZxB?p.ֺ-9/k"0FɂkNuj|:t)jtؗ J$,K"PT'`5_th\ Opw${c m;NY@hɱT6|s9q,UZ7>(:q,ʗmkRWlVBm^%zZV@k:UcJQ7!wM9i55rOy[{/!w8V,)ͺP)Uyd<%Z#g?0#(λ'5E+xYqEdnp׵x"4[cmد&&wܥx}@<]#. j4~u?OC}e_֩GG} Fd{7oǏ^l_)#^vkk{fKӒz-eW|2N pe^6J+D@}UPs|TLQ|/k[^d֜Myğtyu@^4f^'8hMY|tS=ɮ>erڵ nA~em_bM@K]X>#lv=fܟ۳^-Z ^Ǚe>1'X@`϶xVÔ_x(-$L t_ کS(6,mp1Hc>=cno`qPդ} EQz :@8TJPiI.W7ܘbxsdIɶ`ߴK#I]dK RՅJ/S-**+E`w/L銲)|<(жWTsf˔G?^ݾzOҏz"wmد&l8X89q"sd{}I,xtVReґkMd1[ŕӔIeSӊcKNJ)qYQ=C<]AyڲeJ޲Dr,]mͻwJH`M+s+2v&.׉Uȩi'ƙ0 a_3xzD=+ 7J^?,xir\Ȯ%6ݺYr|+\6y*-$\0Q`jJOgdmM%SC~i)@ufZnjzǡ!n%yqKCCm7NwA(ўI:w%wGёǗlրh-[d4".]~D`AcnofXTF')?ASTeVm鯂"OvMNO<Չ,YG'<Sӊ0o&%TM>/,4^ɭw/,$.;E.=jdri }}jxq 727+v@I6njGnV/HHmJC/Z0<;0}sz$Dnu=gr? .9r@mqD>t._]Q?>)#ޱ4^M+@M԰1?T+VM')sdTC92DOn鱫\DvG|WEzi<!))$Ћ%\b鳇K1bѝx;'0pGx>`YjI4_Q:!d %'lwѩ '--T Uz=cdܨ\11ZGOqtk~hmu񠟆yͺk]QɗBPqDFڊYp9;&wnWdG oDՒ^H&zwK1;.  RdKvo^w; ?ZQL?TqTt~$NE{p||M͢}5V+w \\\x -9[4p s4Q.oxZ?'zT|~Ȁ[o0K^l:]Ik*Q.\tʅxFMm@@f2oW%'(zbMΘIqGAcUo$($D^^MʽxXHfȭԋi Yv 7kʸ!-tkwN8h? ƚXGiw>ӓ$qk햒]>-uՁ}([1z1MxUmk?W1. U&L)|eNM4}]tZ>om=t_] ƩKF=:|j9IqRc]@~Ş|q,.rk._"g-GŁ}j!=dpn %f#7V[_V_Ef猱)kAOzb ZMvi)bXh<>ҸÐce[JV˒^.Y%:ƞ4v.&`G*WQg^4\b_N@v'ڠJ-Z;wS?c׏.EǶ7A9>HeN+DdrpUETVe=`QkSuʷ.>7B}gŁ%\{" cFiq6ZH7S'%mD$wuj\pE,۲V5rɁ~썑R3c2$)y_ fnKV8GOlFe|q&^6õqNk}Ѣr6T)>|OYr\v<=#%d… pi:i$\ӕrK@7)85A:()I>%sq|P eFɶ/nÖU~͗E$#UǏmkDoTw Bl\Yn4d(x>tvA'ph6/r~$M5JAjġQT` 7 +D@QRZ>(b_4[l]Ź92ֻ0fF#Xh,[ZYtO]=?3fKߧ,8WrO )EqqdTGY2ʖk#ձ9L,E)bڬkT^iNTpnu;q_4CܮQ`Sx9[(p}".KFĖq|d OYq%|HSj(䠜#w;mZ%kUޑx2,WgtKM;~-NZSEif4~~.~eÄ;QGtȷ, + =BrQ6]v[K^ˁl@df g+uk|JCEo}N1I ? e)Ij㦄u٨t)G. @1Vs*ҧ4.)J ̰ntWw[M5дf9Jq5H 6_u/jfszmRR{%%RerZֹuF[*OkFN~|ܻՁz%5\9ݟ&|uG-cb, V+bR@|ŮhʮOL$|%*.: >n ܶis]MSqQ$ ӏiȪ.]:=F4fmv. ;nEwE.zk  0@U7{gϛ-d6SWzL}:-5Nug`}-nf,e7F_ -rW?;F iw&۟BXtWjO@8:!d_0=bW?iEMzuNTg-Z=/R&69iÊ`sc|{]_QVf_Ia^hsR|DK8!_3u/ٵ>_agǮ]ݺ )>G.v{V YezEtkPZdmW 5Cn̖-OK怾sjd ݾK*ww>Ѣ` i v==,c]դҒp[6*[=0:}8r?mZ_d{_SK) |m!{Hp"̐mɖvͰ#ʽS(z%̪hX[,)}߇CN#"o*[(7+.lXN.ع-K5 0]J8zHۜ*ZF] b>MTS k>gR^q}S .m>2ꎣMﶹ6z3.lN q9Mz\p5~c|TzŔL8_4I--h4G[:Zw-QmNK3=9 EjXdz]zi*YRʱ_b9IkoS"Dՠ4{MЮ F7 )G@}(nż$@kU2c>K宨ǶHol,ןޣle,F֭}=U_WQ+Dz 5xPQI|mmeq%NP'V%%=tD1M3M%(h eo&ɂ3lYUӽsD?"4q]2zmk^hۏC.h䮵yW%ZKKNF@{W=@*5Œۼ.ҔnRcK_.jn*Zp(:奉>jݒQ]Zt@r.pL>z^v)cG@$c^@qnǛ^ƖP(;fZ\%-w bPZ 1`3/ - mojwmQzREr5nګ^]egyΕUwoM>'F%FOy8C_h{%ʵF[cNoe?QǍ5.^֜:hĝ VsՋf+ַϟĹg& e6%G {tAWbK =9*qkF,W$jDON;AAi_p˦ÿ^1^6UX#ﹱk㮩 +[+7f{r$2=k2]ȩǓE3gvGŗ)T֫_9('' IA9> uyۭvy_xd*zq0mrR&0|*iwV.{vwW֒\is nMtǺrIݱSD%N'c{5VfV:2Yx.י`zĨ=!:' HC\tӉ$rO_鶊]3S;vyo֜U%(G^"J+ ZryW_MQ~u3}~I~ *(S\hJRȦeC YVv.\ۺ9?C Y<>:ĝJΠKVv< {=J֌ `-F<+vK[]pxHJo 5Vq+V*5@k=)rl~"㮋MN:qԫ&7ˬ"!9M'<?A52ӣ_pU*tmok)Sӊ`ao6l}K%[=HˎkȮ &@rǧN.>HKO1]KwxQzS}z~VeR`o5rg^.=ٶz.M2 )s`1!MJ5]~g.E`'%3=\i qrm?:7"sz wL{X2kt2U ;*7/8ίAwI= t2&ny6 3n5?Zr+=iy󊯝/ Z6\K|J +J)_oUflvIxrILm(_`/dP>S뒜yjS\&Er菞7d6,;k؏.l#\8lUI\7X2oDBSy 2qzhmʏcdSY*@\;cr_ԒLӵ_5z[j=%_8ss#N\aM'" +%9qnw{ɮKm,y_o(Y3NY2oXOfԡ\@dmKI_]sc%R+;#Ǻ_LpzEjMғۧIp! xV&L`DubbO.}S̙tף^ZQ@fEEtGm.sz$V6+E-F8K(Ğ_&5^@gC5×-Hbrd鶋]3S_ps& pg@/&8չurGϖd|" 8웲NO<uIsEr6ͫMVn+ŵxԻVMQ_/hǕvNsM:Dz)fbZqI'2a)73N-uE +[<;#e'lʚR2'Ma~a X,[U\[QdPJy^E`a*Ԟ1ꓶQ^F-턢6썝@םWJ"mTCP_"X*ײ\S; 㝌_8iiK~80mu?,$o˙ֺJwWJ$l=: ;qL&$浏 d˶ RÏ6EQJQ}u-yjflzFI:@0AUc~^_;c'al^Z]'vt{@m4D/֩lx_T&FHd\_Rً-_LSˉkid_$7)9E֛ctG =r#TeՐu:@aҬd}+>اЉm,ܷpF.DVGyžיcdxH YwOY5gɝy驧rČ_W.Il C\y#6ͮSj|?ﷵ%+uy`%s7UJFm,waey.uDj,W-E\̖%%JPV_g&sXhV6_QX ^րї[GbսkKvyUM쏺VV2Ԅ&69%s(ѵ<.6k:ljjjN=uJ:x'ז)2r,*RX}Q#'71JțknF n&NVɿtrȎ-ܗ́FUZѠhV>([(=S>po&ʽht$RM[\?VI=SzIu(U9SfdY..O~EZ37z$Fy' :X'_4uTF?>[6܊j6vD.ة."O}J7$DgdEϐǶmrњ %'Rz` =T>Ȍ: =npȚ$S?"0 c s2Gi7GK^ }E|OsRjD˄ }KToG5$1rp|5yߟɵ8fRD<>nNѺXĊ  r9M_*&8!G%/7K&d@Tg7F7:1='q`EJ+<*,V5xȳe{skwm#zqt|.('7ǪoMF$\\j?iEFskԓݳD~ D:LbO?ӣDLe-}4][> 㦫MO'v(}cZŲ)qLErɺvM-5"wgpOadFS)AS)/UZ?-ͽY]7Oa(Z?Pf1(@+K/YqM}5/n%r_Sb=Rf2^+kKY#u̪m¨̐2u%\VǕpSK je!u+Vܛzۊm-͓Duˡ7z+:%~r\$\jնӝNI/BǏ h5[^4ywwK]-8KKwI 0W1cU|hX&oG_O:Z\gV(Egj.k(<>d-J9fz@6SSj#5 |5v>?f\!?ۑl[mGChF!~bһWY~#oƥb=QBӜpSp슏=C0ecZy&Gq^''xhll#͚̦s ;8FU*[=[N ;#ͳI5ݬjؤ#tZ^DN/Geް\?QZH6Q.S\\ro2ܵ3zُC&kR5.D6ڬK0"ֶGwcd}>SzǻgQݳZ_3'[so@'Դ4[M^8׸wWT:/hڇ@v0 >1 kBoY?wowc"b:'dΧ}4ԍmܖ<"%wŅo?D\v٫cn]ZkǩLmOq0_ d֏]R +&Yr|/S͓#ʹB$Mbj솾R]D<'6LGmI踲еZ9q`J[# Ȧt7SԚ 焲jz/4x(<NwۮRLhɭTMtb[Ŧ0ZWˁGޗ\PJ+= mk%{Jt|?~/\6X ;>qYƭ]9Ll eٕ.鿒9z.``·~>vDT2C?8x.30+g*s 6?Y/$yd@2ig qxeqYUzJ,_4jRȂ|VJ٣zMBdF0fFM5KVKWX`x\44eFؾظG6>#eq)&eTq(OҞo@91J唟GXv&kJ)ll)N:S"u/ZΏ鎽;'8צ5n=S?*ENwSzθ~scb;}oVOFrh;e ݯ*쎺4Ϋ۪o vu㮈o4Bb8B*%Est˝I=H&ɻ$LPrtG$%o׹ V .W (܂eA* )Kg@.;v˺^{QSjڃq=]:=\W~^UUKFۺ%(MgU2g>4FN/U>-t[I=2]8X޳}=adܛo0vGNK#7@r;Uʥxt3w+V[+5F+D{EnmXiP+@Z= =F.mF<[<7o~`XURg_3?{c\\uT8|=N.q| /=Vгڗ̰+"4|"jGM4gъGe}@AeE踰'vҙɨ5*ѭ\Kf]Dej̎M~'~58|XMuնzǽܛqI zd /%ӻ$ ׃eVNٮ1׷^-7t$,Ŝa|(Kʾ=nyqzeͪܛ=^M?nRp5}Qr>/U*fzrzQ=BnR\ߏ 5jzغԡ[vww ope`e "AGϧ 8h 7\@ýdUT|l<]/怴ZҨœk zAhWB<~ơc֫B7h۾>מ_&9. sTc´IoRO+ GDxhSyF >ڒ ~YEygewޜģAG--5\IoQ}Ng`}tw52hiIK  =FN/U@mUUzxǧ,?783Sler@ŽXupu-:;N-rfNJ4di|߳8iN9W|GۆQ>OYR1ʳ{Kp롷.$w6/!?gqJm̱ɦ+z#Ȣ4E&9@[t/vRɥK_7RKmr> 3jziIk}R_,Q|f4^a58.Lue ULc>iVwֿYPk^ d2 ׉bkWy۶cM@N˭_c:n+׌2oXV]dgZׁGÂ.Fj|Pci 0;VÒ,v_D2ri>wnG/|C#UC4`R]y/iȓV%\Κ/SMRӁ0"b{qg?"WmW5z>+`zz|D=+z<ҾG){P'IY7|v6v7W%*㐽 鶫UoW/q֫K2DZƦ*\[CEUrK6DjwuyoTb)x/4AJ].>cMQωfeNpIIKN>5kсqXk$ܟ6HJyM"0^iڵ?|n/U̻myȭGEqר4\Gf/-D&UOl|_GhܫU+G O> Ĵ F+DURʎ$n:syX>?2%dlraUnµ]~UE;?25zcdݩKJQc)FJKTGc$o# h oN,n;f^s06Yl}mXeZRFؒ&LJy1\iF]&9c~lZ׊#tZ cT~%~N p}Ė듥ҹ-#eܞ)1Pj̳ܺRO AlwRY:!vF=R- sۑ&=>8P/ҾG sա_8}v)7ǑbEi[x255NhXM%KrrvW!d.M=\5{nJCIVxm6Qgpzut9Z]iF;JN]TF#7\,KɏһWGɏsHwOˢՕYՇ^}uQ5a?tt8N(j|)bڦ֨}tTLU,Wrz9r-d?tMfqƓʋӄX/ĦOޜux]MI7QZ$@isA08UX>y''/omkt햟 4W[&'zZf\ջ":xwWꄸ|7*&FvaY4Ձ{~rx Q\o1ɓ|"-&#S }qRcTSJ,X-T)&@6qpCO=WȲ_$8/3iY;;WEԀzkߑfLz GdY#ƪ>:6OI`chMaŊS^D ~.SZ@E*OF&bob=8ȭzڬs:ǩ$@YuI%'"PpwKk{E-[¾^^n k ._2 vIIterSU]'9[&;}:$VNs#]]@zqEgܝQf]U=d}z0> \7̈鮍/ta -ōr@as¥TI$VO PklTF8kSm)w&43pک?ʾvfSyb">J8]W%iN bWZ9x=6}$轑]oFj=bj[ i3 ƪ\\bl`+CǓN7\|fE pzn>}n+BˍUg <pʪ~EdWhMVzd ]г%/@,V]͟׎báPɳ"]=X.WM\k ͓)UgK̸7S58ETl|@9E˞b~ zHf^Q-E,m*.m>Һtb3F*FqRw)Zu`F7L_qE[tۑ&=' +\4+|1LJXXiy3+D.|u>2Ր;7'3k9dόcjX8ص6;1N0Z+c 5zEiŗBڊ[3vzcyɢOAV&y^ezd-K(ȆD{zvdf,ju9p)OV_q]nϣ)y[}̸x8׫vUmug (c:Uʭ\tHx+nSdLvSB>g !9%z훏|| ˺MSko/nmtȨ]:t$&d'1kb_)^LIħ.6oEyS!nN0E0-ŘgrOBoŻز6s`}qVG70̞,l[]]POmY&j]c)uKO~,bo^:U7cYplT|Dۯ=園$78߈RqMe]rs9vlZ:i[+_tެ2o^zñY@C˳]at͎d; .heܔy0.04_UJq65*ȭg}:yw?P,9|S_+Wn=:~$abY5%֩Dz~1du}o7{4B2nG|$i\|#M+:ȉOK%>ǔ/~sqr~=NR`ć}Џ?2sҸWJ1" }p#9QI'ǡe>qMǜKJɩOP:-D^*l EJiK|MfSӈ|}9B``.X5H%pv=0" hc#Gc~@p/0pZ[enB_41V;DjZgm 1KǪN{ꊢvϒznsk<w_gBq`CY7dVxݶr!8Nͽ@זoL:_Pո},eTd\m[Sk2P="}ʪD|r`kc?((!yq:nk\$1Jm);d`EԹxߌmkI5Mqypdx\egcC//cB8Bcccccccccccccccccccccccccccccccccccccccccccccccccc" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?9梈MqL9Q$ԒYM;۵RrhP)1Krr1@-e^@WQyZc~OP)ϴ]6A;a]jʕ sjgkR㝠 GU=ig@\#]qޙ! z|oҙ1!qLc#n)$$M J <`sf摷tXJ`ORq4rJM8>b2J9w0:<3@pz!!:JqEF#2p~$7(4RUt&W̌{Sv!cǥ;_z{qL^" f6& >Y""'"q4ѝ/!ED@'Ҥ8ٜ/\(J<ӑB/5e;I8'ۥVlH vGAMkӴvǵ6Zۿ.̓9##aML~`Wx3ii%)Cϥ!RZqlSTQ1zDo@I@ Ü1(pEpYP|{ #kdA\Ա3 >Hh֐;WPri3ښAx4"(C:X;<`srޝRBPd 8/1lʊRcu8ާ^11P(j gd)'$@buŒt?*$E9n"\u'zB C9 r(C,epTgUrs'P"rK(4w)zwpK`g'M^6\ SJY²:FuON=^K'"@8 n@k:sI1p[4r,B\#q8d 3ީO# *˲г \zLe9XS ;=>XT'&)! 2 OZqnaLc\y0Z~݄mEfc8hV,%5A*䪃j6Q 8wW#'$@QW2;Ĉp03UA~l&0Ck=[;R`$ #<@0Ӧo90 ObH)GqR9 d/VPJߕPǕPB=3SLwӚ%A@GaO1FH=h2cMQ&*I)C?%{@bh+&9ɩl'n:To)p@Ny $c[ 8j?SRc 9 R;xlj|hII HёQ򌚬 {樰?nlu݁3pJϰ9HSq9%"FHl Ғ|Zl5e#6RΥB1i{PX8'qF^)皫;sfr0,T0 UN:yF#8#;nG'IłX=heUR{6$c zL   j}G[:Q$cQ@s!nƟ)ڦncq ̜8ǽVbˏ\@Obd{OZeF' ;ɧ6U!Zcڢܲ2$x4a1!m=OP3#䋆= b.`}`qRXf烑֚у0 HGN=X=h@^ȡ $$( TDK~1Χf݆12nI`HUr}jNjr'H3f>4J bNW;w٨0۱~(t .FNVi9ScEp8 7'p:Rʧ8┝ӱp: C  x₄.Az{*P|GSSo)̋8QiҜ̝82pq9 9`ǏZ fێ=e?)R@Mu!IQp3@##;Ԭف1сFG#v ӥZuv% <}?)3{t =XSqQBH|Z'gP*Jfa8'>9pO#Z`;䎔HPAz/;m$WB̬ԀS՘R Kgld)I1؛qޣɷP?}-6@0iUÖnOL$ă 24C"caM8-U/SXy0FGE)sǿJm:dt⢁RpzG$U `Tӥ5iYL!bC:wsJtkE#ɠ㏗!jFPqQ&w5Zܖ98=k6@9h~N89TGNZCc$ qQpޣB=-XH' Jt 4y*tP\a,Hl` 84gjRPޥcN) e4C8^dy )*y=< FI2(#L qP("2sަïˊ&c4K}N|?JbS\Бp FP{j8N4yPCWgS-c"3c4`F𾔎ˆUA(d{5, `Gx& T`H}i#=*Hɗ8oғ ʄv9d%6JdJk&e=*F*e4l dnNx*&%|8< lJOM:~@ ?{uP0G3R\DlM!icL)+yO-fa;Cb"pN3۽W.O FLQ!hCX psV$'h?Z%dM+G|~sEAtے@yǥ,S2R=W#rO0Hh,<{RbT1BI)%z?ނ>aU+u`TLH9Ҁ"Yy'*NYGAnL4'X( K'Ҙ[PZ gUmDݐA3zTw( 9,sV^Kg` jFŻMLpbUnS}x]sZB ڬ $IcjU\zW"VU!UĊ㊄#=jyd1ɵ~|{`{`HH?Zr$gSg\Dǹ0$Bҡ^dluSblv$@ˑMX'9#烓C6V1!NAL0" *tC%pqrW4c;qI1m I%@M"54yl{@D =;Q4_$OoI& U:!2.i$)=*@WhR1sIp1w,#S;&rH ~`ydx 0pK9o֡hǘX SLAnI)P=IGI& 1#L2XN- 2Hb](T][yr2`9VN2TsQ@B\V" zw Ҁ"sHd2L}68T$j&$4qQJpN@ b,W "+&sO82Fx:pix*rA ɪfZ9rFv`5v=sRFAon+R,e P\?:yvsQ T́'$sdC'%!ɧvz NH99!ȨZ&T>rlK rp*æY\/[yKc)1]Hp SK;CbJh8P!$idF[ fpP.Z"8Gh؏9ٌ7CU)MJ c$o*;NpjԒ ! RzR8Lf$L\aN(C;zի #PII J|T723P194 T9GQғVq)6I\z o&F"O%H4!yeaOpH{B>S&Fz6zO X~aU9S❉4WJpsL_lYM0~Xc V OBqCGҐ$tZUsK*Cjb6)f1OY1N QYMc9i **-ǭJ;P%x b$*)$qcޜ2})*wƀ?كIMt`IMtrees2.tga\Armagan\Creatures\VertexShader\Textures\trees2.tga+CACACameraL>DB=B B@?LA$茒LALampb??{G??L>A4B>??? B4B?@@???LA茒$LALamp.001????ˑ?A4B>??o@A4B?@@???LA$H茒LALamp.002"?,?ge??>A4B>??? B4B?@@???LAH$xLALamp.003?'D?ge??o>A4B>??? B4B?@@???LAx$HLALamp.004?v?.:??>A4B>??? B4B?@@???LA$ؒxLALamp.005P3?!J???L>A4B>??? B4B?@@???LAؒ$LALamp.006?X?@??=A4B>??? B4B?@@???WO(aWOWorldY?Y?Y?T6?+?P(???A@pA@??L=TXh`!TXleafRules.pyޒޒޒXx>DATA@xe,reDATA@):DATAЖ@ ߒpdefDATAЖ. DATA`ЖhߒDATA`ߒDATA`8 DATA8ߒDATA8.DATAȘ8 DATAȘ@DATAXȘxT:e,DATAX8DATA虒X DATA虒08FREEDATA0x虒cDATAx08)DATAxp]DATAPzCDATAPLDATAP8DATA(x DATA(pp [DATAp(@. DATApDATAH- DATAHDATA؝H* [DATA؝ ( DATA h؝P FREEDATAh `FREEDATAhDATA@XA xrDATA@)DATAП@0DATAПhWreenDATA`ПxDATA`x resoDATA`.nV):DATA8def DATA8(DATAȡ8`DATAȡ,DATAXȡLDATAX(DATA袒X+ XaDATA袒0`DATA0x袒* DATAx0DATAx0 $DATAPDATAP DATAऒP(DATAऒ( DATA(pऒ`XaDATAp(/ DATApDATAH@- reenDATAH ], DATAئHes.pDATAئ * $DATA hئP)FREEDATAh lutiDATAhY:e,DATA@def DATA@  DATAШ@x 32DATAШxDATA`Ш DATA`-DATA`DATA8DATA8 DATAȪ8@* ',nDATAȪhf',DATAXȪ# aDATAXDATA諒X8 XaDATA諒0(CDATA0x諒8 DATAx0  DATAx/ DATAPXDATAP,DATA୒PaDATA୒(@aDATA(p୒)FREEDATAp((DATAp8aDATAHpDATAH FREEDATAدH)DATAد(DATA(pد@DATAp(xYreenDATApxDATAHx DATAH-,resDATAرHgle,DATAر ) esolDATA hرȿionVDATAh @def DATAhxch_aDATA@gle,DATA@eafrDATAг@&DATAгPDATA`гeenDATA`(DATA`FREEDATA8@/ ts.pDATA8  DATAȵ8@, DATAȵXDATAXȵ@+ cDATAXDATA趒XH" DATA趒0ĜDATA0x趒atDATAx0P DATAx8)@DATAP DATAPU(repDATAฒP(repDATAฒ( :e,DATA(pฒеdef DATAp(X}DATAp DATAHDATAHDATAغHFREEDATAغ DATA hغ/DATAh HDATAhhDATA@,@DATA@DATAм@DATAм+ DATA`мaDATA`+ DATA`0DATA8@) DATA8hDATAȾ8Y DATAȾDATAXȾDATAXú DATA迒X)FREEDATA迒0pionVDATA0x迒U(repDATAx0E(repDATAxU , nDATAPionVDATAP0DATAPh ,2DATA(’|HDATA(’p’DATAp’’(’ DATA’Òp’XEW %DATAÒHÒ’f',DATAHÒÒÒaDATAÒÒHÒDATAÒ ĒÒXaDATA ĒhĒÒPCDATAhĒĒ ĒHDATAĒĒhĒ [DATAĒ@ŒĒFREEDATA@ŒŒĒ DATAŒŒ@ŒHDATAŒƒŒ DATAƒ`ƒŒDATA`ƒƒƒ rDATAƒƒ`ƒ8DATAƒ8ǒƒp DATA8ǒǒƒDDATAǒǒ8ǒDATAǒȒǒ  DATAȒXȒǒ`)FREEDATAXȒȒȒDATAȒȒXȒYrepeDATAȒ0ɒȒonV)DATA0ɒxɒȒ DATAxɒɒ0ɒdDATAɒʒxɒHDATAʒPʒɒ DATAPʒʒʒԠDATAʒʒPʒDATAʒ(˒ʒ8DATA(˒p˒ʒp^DATAp˒˒(˒DATA˒̒p˒DATA̒H̒˒HFFREEDATAH̒̒̒BFREEDATA̒̒H̒8BDATA̒ ͒̒E.py|DATA ͒h͒̒( G.5) DATAh͒͒ ͒ I.0] DATA͒͒h͒  DATA͒@Β͒` DATA@ΒΒ͒ DATAΒΒ@Β FREEDATAΒϒΒ( Fx.pyDATAϒ`ϒΒ BDATA`ϒϒϒ BDATAϒϒ`ϒ EDATAϒ8Вϒ GDATA8ВВϒ IDATAВВ8В DATAВђВ@ DATAђXђВx ts.pDATAXђђђDATAђђXђ DATAђ0Ғђ0DATA0ҒxҒђh DATAxҒҒ0ҒDATAҒӒxҒ DATAӒPӒҒ(DATAPӒӒӒ`DATAӒӒPӒ DATAӒ(ԒӒ) DATA(ԒpԒӒ8@.DATApԒԒ(ԒpUrepeDATAԒՒpԒrepeDATAՒHՒԒ8 e,leDATAHՒՒՒxonV)DATAՒՒHՒDATAՒ ֒Ւ nDATA ֒h֒Ւ0 scrDATAh֒֒ ֒p~DATA֒֒h֒DATA֒@ג֒dDATA@גג֒(yDATAגג@גhts.pDATAגؒג@x.pyDATAؒ`ؒג0OLaDATA`ؒؒؒYx11DATAؒؒ`ؒ@ZDATAؒ8ْؒ,aDATA8ْْؒDATAْْ8ْHDATAْڒْDATAڒXڒْ@lDATAXڒڒڒPODATAڒڒXڒYem.pDATAڒ0ےڒ`ZDATA0ےxےڒDATAxےے0ے0DATAےܒxےh [DATAܒPܒے0DATAPܒܒܒ DATAܒܒPܒ  DATAܒ(ݒܒX DATA(ݒpݒܒFREEDATApݒݒ(ݒ DATAݒޒpݒDATAޒHޒݒHDATAHޒޒޒ DATAޒޒHޒ)DATAޒޒ onV)DATAxpi = 3.1415926DATAi =DATA ߒdef lrepeat(num,l):DATA . res = []EDATAhߒ for i in range(num):DATAߒ res.extend(l)DATA8 return resDATAߒdef lcat(la,lb):DATA. la.extend(lb)DATA  return laDATA@DATAXxdef l_endpoint(repeat,rotF,curve,length,branch_scale,branch_angle,bank,resolutionV):DATA8 grow_rules = [DATA  ['e', DATA8 ['g']EDATA ],DATA8 ]DATAp terminal_rules = [DATA  ['e',DATAP lrepeat(repeat,[['a',(length / repeat)],['rS',curve],['rF',rotF]])DATA8 ], ADATA x ['lf', [DATAp ['l', 1.0]h DATA @. ]DATA ],DATA - ['h', []DATA ],DATA* ['h2', []bDATA( ],DATAP ['h3', []DATA` ],',DATA ]DATA XA axiom = []DATA, return [axiom,grow_rules,terminal_rules]DATA0DATAXhdef l_activepoint(repeat,rotF,curve,length,branch_scale,branch_angle,bank,resolutionV):DATAx grow_rules = [DATA x ['e', EEDATA. ['g']DATA ],DATA( ]DATA` terminal_rules = [DATA , ['e',DATAP lrepeat(repeat,[['a',(length / repeat)],['rS',curve],['rF',rotF]])DATA( ],DATA + ['h', [DATA` ['l', 1.0]DATA * ]DATA ],DATA 0 ['h2', [DATA ['l', 1.0]DATA  ]DATA( ],DATA  ['h3', [DATA` ['l', 1.0]dHDATA / ]DATA ],DATA@- ['lf', []DATA ],DATA ]DATA * axiom = []DATA,P return [axiom,grow_rules,terminal_rules]DATADATA\def l_fork1_alt_prl(repeat,rotF,curve,length,branch_scale,branch_angle,bank,resolutionV):DATA grow_rules = [DATA  ['e', DATA ['f']DATAx ],DATA  ['f', DATA- ['g']DATA ]DATA ]DATA  terminal_rules = [DATA @* ['lf', [DATAh ['l', 1.0]DATA # ]DATA ],DATA 8 ['h', []DATA ],DATA8 ['h2', []DATA  ],xDATA/ ['h3', []DATAX ],DATA , ['f',['fDATA lcat(lrepeat(repeat,[['a',(length / (2.0 * repeat))],['rS',curve],['rF',rotF],['b',[ ['rF',-bank],['rU',branch_angle],['l',1.0] ] ],['a',(length / (2.0 * repeat))],['rS',curve],['rF',rotF],['b',[['rF',bank],['rU',-branch_angle],['l',1.0] ] ] ]),[])DATA ],',DATA ) ['e',1DATA lcat(lrepeat(repeat,[['a',(length / (2.0 * repeat))],['rS',curve],['rF',rotF],['b',[ ['rF',-bank],['rU',branch_angle],['l',1.0] ] ],['a',(length / (2.0 * repeat))],['rS',curve],['rF',rotF],['b',[['rF',bank],['rU',-branch_angle],['l',1.0] ] ] ]),[])DATA8 ],',DATAp ]pDATA  axiom = []DATA, return [axiom,grow_rules,terminal_rules]DATADATA@DATA\xdef l_fork1_alt_prp(repeat,rotF,curve,length,branch_scale,branch_angle,bank,resolutionV):DATAx grow_rules = [DATA x ['e', EEDATA- ['f']DATA ],DATA ) ['f', DATAȿ ['g']DATA@ ]DATAx ]DATA terminal_rules = [DATA  ['f',REEDATA( lcat(lrepeat(repeat,[['a',(length / (2.0 * repeat))],['rS',curve],['rF',rotF],['b',[ ['rF',(pi * 0.5)],['rS',branch_angle],['rF',bank],['l',1.0] ] ],['a',(length / (2.0 * repeat))],['rS',curve],['rF',rotF],['b',[ ['rF',(-pi * 0.5)],['rS',branch_angle],['rF',bank],['l',1.0] ] ] ]),[])DATAP ],DATA  ['e',DATA, lcat(lrepeat(repeat,[['a',(length / (2.0 * repeat))],['rS',curve],['rF',rotF],['b',[ ['rF',(pi * 0.5)],['rS',branch_angle],['rF',bank],['l',1.0] ] ],['a',(length / (2.0 * repeat))],['rS',curve],['rF',rotF],['b',[ ['rF',(-pi * 0.5)],['rS',branch_angle],['rF',bank],['l',1.0] ] ] ]),[]) REEDATA ],DATA@/ ['lf', []DATA  ],f'DATA @, ['h', []DATAX ],DATA@+ ['h2', []DATA ],DATAH" ['h3', [] 0DATA ],DATA ]DATA P axiom = []DATA,8 return [axiom,grow_rules,terminal_rules]DATADATAXdef l_fork2_prp(repeat,rotF,curve,length,branch_scale,branch_angle,bank,resolutionV):DATA grow_rules = [DATA  ['e', leDATAе ['f']DATAX ],DATA  ['f', DATA ['g']DATA ]DATA ]DATA terminal_rules = [DATA / ['f',REEDATAH lcat(lrepeat(repeat,[['a',(length / (repeat))],['rS',curve],['rF',rotF],['b',[ ['rF',(pi * 0.5)],['rS',branch_angle],['rF',bank],['l',1.0] ] ],['b',[ ['rF',(-pi * 0.5)],['rS',branch_angle],['rF',bank],['l',1.0] ] ] ]),[]) EEDATAh ],DATA , ['e',DATA lcat(lrepeat(repeat,[['a',(length / (repeat))],['rS',curve],['rF',rotF],['b',[ ['rF',(pi * 0.5)],['rS',branch_angle],['rF',bank],['l',1.0] ] ],['b',[ ['rF',(-pi * 0.5)],['rS',branch_angle],['rF',bank],['l',1.0] ] ] ]),[]) ))DATA ],DATA+ ['lf', []DATA ],f'DATA + ['h', []DATA0 ],DATA@) ['h2', []DATAh ],DATAY ['h3', []DATA ],DATA ]EDATA ú axiom = []DATA, return [axiom,grow_rules,terminal_rules]DATApeenDATAXdef l_fork2_prl(repeat,rotF,curve,length,branch_scale,branch_angle,bank,resolutionV):luDATAE grow_rules = [DATA U ['e', DATA ['f']2DATA0 ],>DATA h ['f', 1|DATA ['g']DATA ]eenDATA  ]iDATAX terminal_rules = [DATA  ['f',1EDATA lcat(lrepeat(repeat,[['a',(length / (repeat))],['rS',curve],['rF',rotF],['b',[ ['rF',-bank],['rU',branch_angle],['l',1.0] ] ],['b',[ ['rF',bank], ['rU',-branch_angle],['l',1.0] ] ] ]),[]) 1DATA ],DATA  ['e',DATAP lcat(lrepeat(repeat,[['a',(length / (repeat))],['rS',curve],['rF',rotF],['b',[ ['rF',-bank],['rU',branch_angle],['l',1.0] ] ],['b',[ ['rF',bank], ['rU',-branch_angle],['l',1.0] ] ] ]),[]) DATAH ],5DATA  ['lf', [DATA ['l', 1.0]DATA  ]DATAH ],xDATA  ['h', []DATA ],DATA ['h2', []DATA8 ],DATAp ['h3', []DATA ],DATA ]EDATA  axiom = []DATA,` return [axiom,grow_rules,terminal_rules]DATADATA\def l_fork2_alt_prp(repeat,rotF,curve,length,branch_scale,branch_angle,bank,resolutionV):EDATA grow_rules = [DATA  ['e', fRDATA ['f']DATAH ],DATA  ['f', 0DATA ['g']DATA ]DATA8 ]DATAp terminal_rules = [DATA  ['f',REEDATA lrepeat(repeat,EDATAHH [['a',(length / (2.0 * repeat))],['rS',curve],['rF',rotF],DATAD ['b',[ ['rF',(0.0)],['rS',branch_angle],['l',1.0] ] ],nDATAD8 ['b',[ ['rF',(pi)],['rS',branch_angle],['l',1.0] ] ] ,DATAH ['a',(length / (2.0 * repeat))],['rS',curve],['rF',rotF],2DATAH(  ['b',[ ['rF',(pi * 0.5)],['rS',branch_angle],['l',1.0] ] ],DATAL  ['b',[ ['rF',(-pi * 0.5)],['rS',branch_angle],['l',1.0] ] ] ]EEDATA  )DATA`  ],DATA  ['e',1DATA  lrepeat(repeat,DATAH(  [['a',(length / (2.0 * repeat))],['rS',curve],['rF',rotF],DATAD  ['b',[ ['rF',(0.0)],['rS',branch_angle],['l',1.0] ] ],DATAD  ['b',[ ['rF',(pi)],['rS',branch_angle],['l',1.0] ] ] ,DATAH  ['a',(length / (2.0 * repeat))],['rS',curve],['rF',rotF],uDATAH  ['b',[ ['rF',(pi * 0.5)],['rS',branch_angle],['l',1.0] ] ],DATAL  ['b',[ ['rF',(-pi * 0.5)],['rS',branch_angle],['l',1.0] ] ] ]DATA  )DATA@ ], DATAx ['lf', []DATA ],f'DATA  ['h', []DATA0 ],ADATAh ['h2', []DATA ],DATA ['h3', []DATA( ],DATA` ]DATA  axiom = []DATA, return [axiom,grow_rules,terminal_rules]DATA8DATAXpdef l_fork3_prp(repeat,rotF,curve,length,branch_scale,branch_angle,bank,resolutionV):k,DATA grow_rules = [DATA 8 ['e', DATAx ['f'](DATA ],`DATA  ['f', DATA0 ['g']DATAp ]DATA ]DATA terminal_rules = [DATA ( ['f',REEDATAh lrepeat(repeat,EEDATAD [['a',(length / (repeat))],['rS',curve],['rF',rotF],3xDATAP0 ['b',[ ['rF',(0.0)],['rS',branch_angle],['rF',bank],['l',1.0] ] ],DATA\ ['b',[ ['rF',(pi * 0.666666)],['rS',branch_angle],['rF',bank],['l',1.0] ] ],EEDATA\@ ['b',[ ['rF',(-pi * 0.666666)],['rS',branch_angle],['rF',bank],['l',1.0] ] ] EDATA ])DATA ],ppDATA H ['e',SDATA lrepeat(repeat,DATAD [['a',(length / (repeat))],['rS',curve],['rF',rotF],DATAPP ['b',[ ['rF',(0.0)],['rS',branch_angle],['rF',bank],['l',1.0] ] ],DATA\ ['b',[ ['rF',(pi * 0.666666)],['rS',branch_angle],['rF',bank],['l',1.0] ] ],EEDATA\` ['b',[ ['rF',(-pi * 0.666666)],['rS',branch_angle],['rF',bank],['l',1.0] ] ] EDATA ])DATA0 ],DATAh ['lf', []DATA ],DATA  ['h', []DATA  ],DATAX ['h2', []DATA ],DATA ['h3', []DATA ],ONDATAH ]DATA  axiom = []DATA, return [axiom,grow_rules,terminal_rules]ueDATA ef TXh!ۓ`TXlsystem.py "v88ד0DATA "h"w DATAh"" "Xw *nDATA""h"wreenDATA"@#"w.py|DATA@##"0xt *DATA##@#xx FREEDATA#$#xDATA$`$#xreenDATA`$$$8yDATA$$`$y eenDATA$8%$yreenDATA8%%$z DATA%%8%@zreenDATA%&%zconiDATA&X&%z FREEDATAX&&&{ reenDATA&&X&@{ maxdDATA&0'&{DATA0'x'&{@DATAx''0'| DATA'(x'H|= 1DATA(P('|DATAP(((|turtDATA((P(}#DATA(()(p}DATA()p)(} reenDATAp))()}turtDATA)*p)@~/forcDATA*H*)~5urtlDATAH***)eenDATA**H*hreenDATA* +*)eafmDATA +h+* reenDATAh++ +@ DATA++h+ reenDATA+@,+ DATA@,,+reenDATA,,@,8 reenDATA,-,I{DATA-`-, eleaDATA`---h reenDATA--`-(nf)DATA-8.-reenDATA8..-81reenDATA..8.*reenDATA./.py| DATA/X/.HDATAX/// FREEDATA//X/؄ DATA/00/uv:DATA00x0/X] DATAx0000pendDATA01x0腓(nuvDATA1P100eenDATAP111 DATA11P1؆DATA1(21h,tuDATA(2p21H/py| DATAp22(2eaf:DATA23p2 reenDATA3H320tenDATAH333x reenDATA33H3reenDATA3 43= leDATA 4h43Xin sDATAh44 4n saDATA44h4rts:DATA4@54Hs:nDATA@554)reenDATA55@5& vgDATA565HDATA6`65 .appDATA`666؋esh.DATA66`6 ace(DATA6876he()DATA8776/DATA7787.py|DATA787X DATA8X87$0 DATAX888.py|DATA88X8XDATA8098"s)nDATA09x98] > DATAx9909(s:mDATA9:x9`:reenDATA:P:9ЏDATAP:::(on 'DATAh== =ȓ3st(vDATA==h=0*],vgDATA=@>=ts.aDATA@>>=(reenDATA>>@>@>reenDATA>?>1XaDATA?`?>(DATA`???xDATA??`?Ȗ,aDATA?8@?rticDATA8@@?h-vertDATA@@8@ȗ FREEDATA@A@ DATAAXA@h%DATAXAAA6d(meDATAAAXA("s[i]DATAA0BA=@aDATA0BxBA6% brDATAxBB0BX?@aDATABCxBȚ9reenDATACPCB88DATAPCCC nfDATACCPCi + DATAC(DC8.FacDATA(DpDC!DATApDD(Ds =DATADEpD0eenDATAEHEDh02DATAHEEEН"DATAEEHE(es)DATAE FEpve_vDATA FhFEve_vDATAhFF F-FREEDATAFFhFp$in rDATAF@GFȟn rDATA@GGF(navDATAGG@GX.FacDATAGHG#RDATAH`HG,f.v.DATA`HHHXi]) DATAHH`H6) % DATAH8IH-i]) DATA8IIHh.FREEDATAII8IȢs.apDATAIJIDATAJXJIP.appDATAXJJJDATAJJXJأ"DATAJ0KJ(tokDATA0KxKJH(tokDATAxKK0K] ==DATAKLxK褓t.pyDATALPLK m):DATAPLLLhFREEDATALLPLokenDATAL(ML襓okenDATA(MpML0DATApMM(MreenDATAMNpMn):DATANHNMt.pyDATAHNNNPDATANNHNef lDATAN ONЧ):nDATA OhON reenDATAhOO OX):DATAOOhOef lDATAO@POreenDATA@PPO(okenDATAPP@Ppx 32DATAPQPDATAQ`QPn):DATA`QQQ@DATAQQ`QreenDATAQ8RQȪls_DATA8RRQ 0DATARR8RHreenDATARSRDATASXSRes, DATAXSSS DATASSXSHles:DATAS0TS= toDATA0TxTSଓeenDATAxTT0T( es, DATATUxThn):DATAUPUT-n):DATAPUUU&ion)DATAUUPUXDATAU(VU)DATA(VpVU neDATApVV(V0DATAVWpVx(strDATAWHWVȯDATAHWWWreenDATAWWHW` reenDATAW XWn >DATA XhXWaDATAhXX X>n) iDATAXXhX#pendDATAX@YXh DATA@YYX'FREEDATAYY@Yurn DATAYZY@DATAZ`ZY reenDATA`ZZZгDATAZZ`Z tr:DATAZ8[Zhtr:DATA8[[ZreenDATA[[8[ش!DATA[\[0DATA\X\[p stDATAX\\\DATA\\X\.t.pyDATA\0]\htr:DATA0]x]\@DATAx]]0] tokeDATA]^x]H+DATA^P^]t.pyDATAP^^^跓eenDATA^^P^8DATA^(_^rn nDATA(_p_^DATAp__(_PeshDATA_`p_xyMatDATA`H`_ȹdsh,tDATAH````0,0.DATA``H`vreenDATA` a`@reenDATA aha`(mesDATAhaa a໓0 DATAaaha0h,tuDATAa@baxpy| DATA@bbaȼ#ing(DATAbb@b NurtlDATAbcbP DATAc`cb(K)otDATA`cccYreenDATAcc`c8<DATAc8dcing(DATA8ddcDATAdd8d[DATAded.py| DATAeXed.py|DATAXeee@“IhDATAeeXe“LllofDATAe0fe@ÓG@aDATA0fxfeÓturtDATAxff0fēen):DATAfgxfXēDATAgPgfē>h,tuDATAPgggœ(tokDATAggPghœA}DATAg(hgœ(tokDATA(hphg0Ɠ< DATAphh(hƓDATAhiphƓreenDATAiHih8ǓokenDATAHiiiǓ_leDATAiiHiǓ8t.geDATAi jiHȓ[0]:DATA jhjiȓ;(tokDATAhjj jɓreenDATAjjhj8ɓ_perDATAj@kjxɓ@DATA@kkjɓDATAkk@kɓt.pyDATAklk(ʓCDATAl`lk`˓orceDATA`lll@̓reenDATAll`l̓sh.GDATAl8ml̓DATA8mml ͓DATAmm8mp͓EW %DATAmnm͓DATAnXnmΓDATAXnnnXΓreenDATAnnXnΓreenDATAn0onΓ0DATA0oxon@ϓeenDATAxoo0oϓpy| DATAopxoϓismDATApPpo(ГorteDATAPppppГ&DATAppPpГ%0DATAp(qp ѓDATA(qpqpXѓlsysDATApqq(qѓDATAqrpqѓ*DATArHrqPғ/reenDATAHrrrғ DATArrHrғFREEDATAr srHӓ@DATA shsrӓf = DATAhss sӓ3eafoDATAsshs8ԓVDATAs@tsԓturtDATA@ttsՓ!eafmDATAtt@thՓeafmDATAtutՓavesDATAu`utՓP0DATA`uuu֓reenDATAuu`uH֓DATAu8vu֓e(roDATA8vvu֓4p-DATAvv8v0ד DATAvvpדt.pyDATAwfrom Blender import * iDATAXwfrom math import *tDATAwfrom copy import *DATAwfrom types import *DATA0xfrom Matrix import *5DATAxximport randomDATAxDATAxforce = [0.0, 1.0, 0.0]DATA8yscaleforce = 0.0eenDATAyresLOD = 0.0DATAyleafscale = 1.0DATA zprune = 0.0DATA@zprunefirst = 0DATAzthickness = 0.0DATAzconism = 0.0DATA{shorten = 0.0DATA@{maxdepth = 0gDATA{randScale = 0.0DATA{randThin = 0.0DATA|min_prune_level = 1015DATAH|max_prune_level = 1015DATA|in_DATA |def apply_force(turtle,scale):DATA$} s = (1.0 - scale*scaleforce*10.0)DATAp} if s <= 0.0:DATA } returnDATA } lf = vec_scal_mul(force,s)DATA0@~ turtle[1] = vec_normal(vec_add(turtle[1],lf))DATA8~ turtle[0] = vec_normal(crossp(turtle[1],turtle[2]))DATA, turtle[2] = crossp(turtle[0],turtle[1])EDATAheenDATA,def generate_sample_leaf(sampleleafmesh):DATA verts = []DATA@ faces = []DATA  uvs = []DATA modes = []DATADATA$8 for v in sampleleafmesh.verts:DATAL verts.append([v.co[0]*leafscale,v.co[1]*leafscale,v.co[2]*leafscale])EEDATA$ for f in sampleleafmesh.faces:rldDATA h nf = []DATA faces.append(nf)15DATA for pv in f.v:nDATA48 for iv in range(len(sampleleafmesh.verts)):07DATA, if sampleleafmesh.verts[iv] is pv:DATA nf.append(iv)DATAHDATA$ for f in sampleleafmesh.faces:DATA؄ if f.uv:DATA nuv = []DATAX for uv in f.uv:DATA nuv.append(uv)DATA腓 uvs.append(nuv)5DATA0 modes.append(f.mode)1EDATA$ return [verts,faces,uvs,modes]eenDATA؆ DATAeenDATA0Hdef add_leaf(mesh,leaf_data,turtle,sampleleaf):DATA if not sampleleaf:DATA  returnDATA0# C = NMesh.ConstDATA x# print CDATA  last_vertex = len(mesh.verts)DATA  sampleverts = sampleleaf[0]x.DATA X samplefaces = sampleleaf[1]:DATA  sampleuvs = sampleleaf[2]DATA  samplemodes = sampleleaf[3]DATAH for v in sampleverts:DATA, vg = transform_point_to_src(turtle,v)DATA( nv = NMesh.Vert(vg[0],vg[1],vg[2])DATAH mesh.verts.append(nv)EDATA  iface = 0DATA؋ for f in samplefaces:DATA  nf = NMesh.Face()5DATAh for fv in f:eenDATA0 nf.v.append(mesh.verts[last_vertex + fv])DATA if sampleuvs:DATA$X nf.uv = sampleuvs[iface]eenDATA( nf.mode = samplemodes[iface]15DATA mesh.faces.append(nf)EDATAX iface += 1DATA$ leaf_data[0] += len(sampleverts)nDATA NMDATA(eenDATA<`def add_branch(mesh,turtle,bradius,blen,bres,branch_data):EDATAЏ bresolution = int(bres)DATA( if bresolution < 3:DATAp bresolution = 35DATA( active_vertices = branch_data[0]DATA by = branch_data[1]DATA$X last_vertex = len(mesh.verts)leDATA new_vertices = []m DATA  first_active_vertices = []%DATA$H for v in range(bresolution):DATA8 phi = (float(v) / float(bresolution)) * pi * 2276DATA  if active_vertices == []:DATA@X v_local = [cos(phi) * bradius ,0.0, sin(phi)* bradius]DATA4ȓ vg = transform_point_to_src(turtle,v_local)DATA,0 nv = NMesh.Vert(vg[0],vg[1],vg[2])EDATA  mesh.verts.append(nv))DATA, first_active_vertices.append(nv)1EDATA@@ v_local = [cos(phi)* bradius , blen , sin(phi)* bradius]DATA4 vg = transform_point_to_src(turtle,v_local)DATA, nv = NMesh.Vert(vg[0],vg[1],vg[2])DATAx mesh.verts.append(nv)DATA Ȗ new_vertices.append(nv)DATA  if active_vertices == []:EEDATA0h active_vertices = first_active_verticesrDATA$ȗ for i in range(bresolution):DATA  nf = NMesh.Face()DATA(h nf.v.append(active_vertices[i])0.DATA8 nf.uv.append((float(i) / float(bresolution),by))DATA$( nf.v.append(new_vertices[i])nDATA@ nf.uv.append((float(i) / float(bresolution),by + blen))DATA8 nf.v.append(new_vertices[(i + 1) % bresolution])uDATA@X nf.uv.append((float(i+1) / float(bresolution),by + blen))DATA<Ț nf.v.append(active_vertices[(i + 1) % bresolution])tiDATA<8 nf.uv.append((float(i+1) / float(bresolution),by))bDATA nf.smooth = 1DATA nf.mode = 0enDATA8 mesh.faces.append(nf)DATA$ branch_data[0] = new_verticesenDATA  branch_data[1] = by + blen DATA0 DATA4hdef close_branch(mesh,turtle,branch_data,scale):DATA$Н active_vertices = branch_data[0]nDATA( by = branch_data[1]DATA p nav = len(active_vertices)DATA v_local = [0.0,scale,0.0]DATA0 vg = transform_point_to_src(turtle,v_local)DATA(p nv = NMesh.Vert(vg[0],vg[1],vg[2])DATAȟ mesh.verts.append(nv)DATA for i in range(nav):gDATAX nf = NMesh.Face()DATA$ nf.v.append(active_vertices[i])DATA0 nf.uv.append((float(i) / float(nav),by))DATAX nf.v.append(nv)DATA8 nf.uv.append(((float(i)+0.5) / float(nav),by+0.1))DATA0 nf.v.append(active_vertices[(i+1) % nav])EEDATA0h nf.uv.append((float(i+1) / float(nav),by))DATAȢ nf.smooth = 1EEDATA nf.mode = 0DATAP mesh.faces.append(nf))DATA meDATAأDATAeenDATAHdef is_substring(token):REEDATA return token[0] == 'b'1EDATA褓aDATA def forward(param):DATAh return ['f',param]15DATA.pyDATA襓def is_advance(token):DATA0 return token[0] == 'a'1EDATAqDATAdef is_rotS(token):DATA return token[0] == 'rS'DATAPeenDATAdef is_rotF(token):DATAЧ return token[0] == 'rF'DATA DATAXdef is_rotU(token):DATA return token[0] == 'rU'DATADATA(def is_scale(token):15DATAp return token[0] == 's'1EDATADATAdef is_leaf(token):DATA@ return token[0] == 'l'1EDATADATAȪdef ls_token():DATA  return[]DATAHpDATAot_DATAdef get_rule(rules, token):DATA res = NoneDATAH for rule in rules:15DATA if rule[0] == token:1EDATAଓ return ruleenDATA( return NoneEDATAheenDATA0def grow_aux(str,grow_rules,iteration,level):DATA( grow_aux(str,grow_rules,iteration,0)DATAXeenDATA,def grow(str,grow_rules,iteration,level):EEDATA new_str = []DATA0 str_len = len(str)15DATAx for i in range(str_len):DATAȯ token = str[i]nDATA  if type(token) is ListType:DATA$` if iteration > prunefirst:DATA  if level < maxdepth:DATAd if (level < min_prune_level) or (level > max_prune_level) or (random.random() > prune):DATA@ sub_str = grow(token,grow_rules,iteration,level+1)EDATA$ new_str.append(sub_str)DATA h else:DATA( rule = get_rule(grow_rules,token)DATA if rule:DATA @ new_str.extend(rule[1])DATA  else:DATA г new_str.append(token)DATA  return new_str w_sDATAh DATA"DATA$شdef finalize(str,terminal_rules):enDATA0 new_str = []DATAp for token in str:DATA  if type(token) is ListType:DATA0 sub_str = finalize(token,terminal_rules)DATA h new_token = ['b',sub_str]DATA  new_str.append(new_token)DATA  else:DATA,H rule = get_rule(terminal_rules,token)DATA if rule:DATA 跓 new_str.extend(rule[1])DATA8 return new_streenDATA DATADATATdef get_mesh(mesh,leafmesh,str,resolution,rot_rand_per,rot_rand_abs,sampleleaf):nDATA x turtle = identityMatrix4()tiDATAhȹ get_branch(mesh,leafmesh,[0,0],turtle,str,1.0,1.0,resolution,rot_rand_per,rot_rand_abs,sampleleaf)DATA`eenDATAxdef get_branch(mesh,leafmesh,leafmesh_data,turtle,str,scale,lenscale,resolution,rot_rand_per,rot_rand_abs,sampleleaf):DATA @ scale_falloff = 1.0 - conismDATA len_keep = 1.0 - shortenEDATA໓ branch_data = [[],0.0]1EDATA0 for token in str:DATAx if is_substring(token):DATA$ȼ turtle_aux = deepcopy(turtle)DATAP  matrix_rotate_about_side(turtle_aux,r_rot_per * (random.random() - 0.5))DATAT matrix_rotate_about_forward(turtle_aux,r_rot_per* (random.random() - 0.5))DATAL( matrix_rotate_about_up(turtle_aux,r_rot_per* (random.random() - 0.5))DATA\ new_resolution = (1.0 * resolution)* (1.0 - resLOD) + (scale * resolution) * resLODEEDATA@8 randscale_factor = 1.0 - (randScale * random.random())DATA get_branch(mesh,leafmesh,leafmesh_data,turtle_aux,token[1],(scale * randscale_factor) * (1.0 - (randThin * random.random())),lenscale * randscale_factor,new_resolution,rot_rand_per,rot_rand_abs,sampleleaf)DATA elif is_advance(token):DATA\ add_branch(mesh,turtle,thickness * scale,token[1] * lenscale, resolution,branch_data)DATA0 matrix_advance(turtle,token[1]*lenscale)DATA  apply_force(turtle,scale)DATAL@“ matrix_rotate_about_side(turtle,r_rot_abs* (random.random() - 0.5))EEDATAP“ matrix_rotate_about_forward(turtle,r_rot_abs* (random.random() - 0.5)))DATAH@Ó matrix_rotate_about_up(turtle,r_rot_abs* (random.random() - 0.5))DATA Ó scale *= scale_fallofffDATAē lenscale *= len_keepEDATAXē elif is_rotS(token):DATA@ē matrix_rotate_about_side(turtle,rot_randomize(token[1])).DATAœ elif is_rotF(token):REEDATADhœ matrix_rotate_about_forward(turtle,rot_randomize(token[1]))enDATAœ elif is_rotU(token):1EDATA@0Ɠ matrix_rotate_about_up(turtle,rot_randomize(token[1]))DATAƓ elif is_scale(token):EDATAƓ scale *= token[1]DATA8Ǔ lenscale *= token[2]EDATAǓ elif is_leaf(token):17DATA<Ǔ add_leaf(leafmesh,leafmesh_data,turtle,sampleleaf)EDATAHȓ if branch_data[0]:5DATA<ȓ close_branch(mesh,turtle,branch_data,thickness * scale)DATAɓDATA8ɓr_rot_per = 0.0DATAxɓr_rot_abs = 0.0DATAɓ-DATAɓeenDATA(ʓdef lsystem_build(axiom,grow_rules,final_rules,iterations,g_thickness,g_conism,g_shorten,resolution,resolutionLOD,rot_rand_per,rot_rand_abs,g_randScale,g_prune, g_prunefirst, g_maxdepth, g_min_prune_level, g_max_prune_level, glob_force, sforce, lfscl, leafobj):DATA`˓ global r_rot_per, r_rot_abs, force, resLOD, scaleforce, leafscale, prune, prunefirst, thickness, conism,shorten,maxdepth,min_prune_level, max_prune_level,randScale,randThinDATA@̓ force = glob_force15DATA̓ scaleforce = sforce5DATA̓ r_rot_per = rot_rand_perDATA ͓ r_rot_abs = rot_rand_absDATAp͓ randScale = g_randScaleDATA͓ randThin = g_randScale1DATAΓ leafscale = lfsclDATAXΓ resLOD = resolutionLODREEDATAΓ prune = g_pruneenDATAΓ prunefirst = g_prunefirstDATA@ϓ maxdepth = g_maxdepthDATAϓ thickness = g_thicknessEDATAϓ conism = g_conismDATA(Г shorten = g_shorten5DATA(pГ min_prune_level = g_min_prune_level DATA(Г max_prune_level = g_max_prune_levelDATA ѓeenDATAXѓ lsystem = axiom, DATA ѓ for i in range(iterations):DATA,ѓ lsystem = grow(lsystem,grow_rules,i,1)DATA0Pғ final_string = finalize(lsystem,final_rules) DATAғ mesh = NMesh.GetRaw()DATAғ leafmesh = NMesh.GetRaw()DATAHӓ sampleleaf = NoneDATAӓ if leafobj:DATA4ӓ sampleleaf = generate_sample_leaf(leafobj.data)DATAX8ԓ get_mesh(mesh,leafmesh,final_string,resolution,rot_rand_per,rot_rand_abs,sampleleaf)DATAԓ NMesh.PutRaw(mesh,"tree")DATA$Փ NMesh.PutRaw(leafmesh,"leaves")DATAhՓ NMDATAՓbleDATAՓeenDATA֓DATAH֓-DATA֓def rot_randomize(rot):DATA8֓# return rot + (-rot * random.random() * r_rot_per) DATA0ד return rotDATApדTXhۓh!TXMatrix.pypܓ8DATApܓܓ *DATAܓݓpܓ`@DATAݓHݓܓ(s,vDATAHݓݓݓ(s,vDATAݓݓHݓ&8DATAݓ ޓݓp|_DATA ޓhޓݓDATAhޓޓ ޓ&DATAޓޓhޓHXaDATAޓ@ߓޓCDATA@ߓߓޓ1DATAߓߓ@ߓ0DATAߓߓhDATA`ߓ1DATA`DATA`PDATA84DATA8CDATA88DATA\XaDATAXDATAXHDATAX2DATA0DATA0x(DDATAx0pDATAx!DATAPXaDATAPHDATAP DATA( XaDATA(pH DATAp(%DATApDATAH0@DATAH5 DATAH MDATA   DATA hx!CDATAh DATAh(FREEDATA@`!DATA@DATA@&XaDATA`DATA`"DATA`DATA`DATA8#DATA8@DATA8DATA8DATAX1DATAXDATAX(&DATA0DATA0xDATAx0BXaDATAxBDATAP$yDATAPX$FCDATAP@vDATA()DATA(pHDATAp(DATApBDATAHP BDATAH DATAH DATA(X DATA(p $DATAp( DATAp0 DATAHx BDATAH BDATAHh DATA  DATA h DATAh 0 DATAhx `DATA@CDATA@HDATA@<XaDATA0DATAfrom math import *mDATA`romDATADATAdef scal_vec_mul(s,v):DATA( return [s * v[0],s * v[1],s * v[2]]DATApDATAdef vec_scal_mul(v,s):DATA( return [s * v[0],s * v[1],s * v[2]]DATAHDATAdef vec_add(va,vb):DATA4 return [va[0]+vb[0], va[1]+vb[1], va[2]+vb[2]]nsDATA0@ADATAhdef vec_sub(va,vb):DATA4 return [va[0]-vb[0], va[1]-vb[1], va[2]-vb[2]]DATADATAPdef dotp(va, vb):ldDATA8 return (va[0]*vb[0] + va[1]*vb[1] + va[2]*vb[2])DATADATA8def crossp(va,vb):DATA` return ([va[1]*vb[2] - va[2]*vb[1],va[2]*vb[0] - va[0]*vb[2],va[0]*vb[1] - va[1]*vb[0]])bDATADATAHdef vec_len(v):DATA4 return sqrt(v[0]*v[0] + v[1]*v[1] + v[2]*v[2])DDATADATA(def vec_normal(v):EDATAp l = vec_len(v)DATA$ return [v[0]/l,v[1]/l,v[2]/l]DATADATA Hdef transform_dir_to_src(m,v):DATA$ v1 = scal_vec_mul(v[0],m[0])DATA$ v2 = scal_vec_mul(v[1],m[1])DATA$H v3 = scal_vec_mul(v[2],m[2])DATA( return vec_add(v1,vec_add(v2,v3))DATADATA 0def transform_dir_to_dest(m,v):DATA8 return [dotp(m[0],v), dotp(m[1],v), dotp(m[2],v)]DATADATA$ def transform_point_to_src(m,v): DATA$x p = transform_dir_to_src(m,v)DATA return vec_add(p,m[3])4DATA(DATA$`def transform_point_to_dest(m,v):DATA vo = vec_sub(v,m[3])DATA( return transform_dir_to_dest(m,vo)DATA`DATA$def transform_matrix_to_src(m,mt):DATA return [transform_dir_to_src(m,mt[0]), transform_dir_to_src(m,mt[1]), transform_dir_to_src(m,mt[2]), transform_point_to_src(m,mt[3])]DATAuCDATA$def transform_matrix_to_dest(m,mt):DATA@ return [transform_dir_to_dest(m,mt[0]), transform_dir_to_dest(m,mt[1]), transform_dir_to_dest(m,mt[2]), transform_point_to_dest(m,mt[3])]DATADATA 8def matrix_advance(m,alpha):DATA4 m[3] = vec_add(m[3],vec_scal_mul(m[1],alpha))DATADATA((def matrix_rotate_about_side(m,alpha):DATA ca = cos(alpha)DATA sa = sin(alpha)DATAD new_f = vec_add(vec_scal_mul(m[1],ca) , vec_scal_mul(m[2],sa))DATAD new_u = vec_sub(vec_scal_mul(m[2],ca) , vec_scal_mul(m[1],sa))DATA( m[1][0], m[1][1],m[1][2] = new_fDATA(X m[2][0], m[2][1],m[2][2] = new_uDATADATA,def matrix_rotate_about_forward(m,alpha):DATAH ca = cos(alpha)DATA sa = sin(alpha)DATAD new_s = vec_sub(vec_scal_mul(m[0],ca) , vec_scal_mul(m[2],sa))DATADP  new_u = vec_add(vec_scal_mul(m[2],ca) , vec_scal_mul(m[0],sa))DATA  m[0] = new_sDATA  m[2] = new_uDATAX aDATA( def matrix_rotate_about_up(m,alpha):DATA  ca = cos(alpha)DATA0  sa = sin(alpha)DATADx  new_s = vec_add(vec_scal_mul(m[0],ca) , vec_scal_mul(m[1],sa))DATAD  new_f = vec_sub(vec_scal_mul(m[1],ca) , vec_scal_mul(m[0],sa))DATAh  m[0] = new_sDATA  m[1] = new_fDATA DATA0 def identityMatrix4():DATAdx  return [[1.0, 0.0, 0.0, 0.0],[0.0, 1.0, 0.0, 0.0],[0.0, 0.0, 1.0, 0.0],[0.0, 0.0, 0.0, 1.0]]DATADATAHdef identityMatrix3():DATA@ return [[1.0, 0.0, 0.0],[0.0, 1.0, 0.0],[0.0, 0.0, 1.0]]rDATATXhhpۓTXrulesets.py z??@4DATAHhzreenDATAHzDATAHzl):DATA ({ reenDATA hh{DATAh {DATAh{ )enDATA@8|reenDATA@|reenDATA@| reenDATA}reenDATA`8}[1,p2DATA`}def DATA`~ --- DATA8H~--- DATA8~FREEDATA8~ DATA0|ScDATAX@DATAXxDATAXDATA0VDATA0xser DATAx0 ser DATAxser DATAPPser DATAPser DATAPDATA()DATA(phDATAp([def DATAp0DATAHp)reenDATAHЃ:caleDATAH@DATA x reenDATA hDATAh  DATAh(epeaDATA@p DATA@XaDATA@DATA 8DATA ` xVDATA`   DATA  ` 8 DATA 8! xRDATA8!! DATA!!8!8DATA!"!pDATA"X"!)DATAX"""lutiDATA""X"P[,lenDATA"0#"caleDATA0#x#" )utioDATAx##0#:reenDATA#$x#rDATA$P$#( DATAP$$$h DATA$$P$ DATA$(%$؋DATA(%p%$  DATAp%%(%` DATA%&p%DATA&H&%茔DATAH&&&(V DATA&&H&DATA& '&荔 y| DATA 'h'&(d[EEDATAh'' ',[DATA''h'iDATA'@('0DATA@(('x)DATA((@(؏DATA()(\eat,DATA)`)(eat,DATA`))) DATA))`) HDATA)8*)5):DATA8**)ؑ [DATA**8*FPDATA*+*reenDATA+X+*Ȓ reenDATAX+++DATA++X+@aCDATA+0,+xDATA0,x,+eenDATAx,,0,VDATA,-x,PDATA-P-, DATAP---[DATA--P-P.py|DATA-(.- DATA(.p.-ȕ9DATAp..(.8DATA./p.p DYDATA/H/.:DATAH/// DATA//H/X `DATA/(0/!aDATA(0p0/FREEDATAp00(0( reenDATA01p0h"DATA1H10pi]DATAH111UDATA11H10DATA1 21x)DATA 2h21ؙreenDATAh22 2\reenDATA22h2):uDATA2@32 engtDATA@332 AcurvDATA33@3ionVDATA343Л reenDATA4`43DATA`444HreenDATA44`4DATA4854ȜDATA8554Vs.pyDATA5585DATA565ȝ DATA6X65XaDATAX666XDATA66X6 DATA6076ОbXaDATA07x76hDATAx7707 DATA78x7dDATA8P87x\DATAP888DATA88P8蠔DATA8(980) rDATA(9p98DATAp99(9ȡ_reenDATA9:p9Xat /DATA:H:9t % DATAH:::袔 soluDATA::H:(eat,DATA: ;:p soluDATA ;h;:]):uDATAh;; ;@FREEDATA;;h;x ['hDATA;@<;\`DATA@<<;H %x DATA<<@<reenDATA<=<DATA=`=< DATA`===0:olDATA==`=h = [DATA=8>= [adDATA8>>=MDATA>>8>pDATA>?>reenDATA?X?>觔DATAX???  DATA??X?XminaDATA?0@? ]DATA0@x@?ਔ DATAx@@0@0s = DATA@Ax@hch_aDATAAPA@VDATAPAAA0DATAAAPAh DATAA(BARDATA(BpBA0@EDATApBB(Bh DATABCpBT@DATACHCB0DATAHCCChDATACCHCFREEDATAC DC謔)DATA DhDCHionVDATAhDD D_reenDATADDhDesolDATAD@EDXnV,pDATA@EED repeDATAEE@EஔV,p1DATAEFE( repeDATAF`FEh]DATA`FFFDATAFF`F0 DATAF8GFp\`DATA8GGFDATAGG8G8FREEDATAGHGx`DATAHXHG DATAXHHH豔DATAHHXH DATAH0IHh `DATA0IxIHMDATAxII0I(DATAIJxI`DATAJPJI0+DATAPJJJسDATAJJPJDATAJ(KJX DATA(KpKJFREEDATApKK(K贔DATAKLpK DATALHLK`VDATAHLLL赔DATALLHL  r',[DATAL ML`b;DATA MhML DATAhMM M0 lcaDATAMMhMpd DATAM@NMDATA@NNM@r',[DATANN@NxDATANON)>DATAO`ON DATA`OOOX[,p2,DATAOO`O蹔DATAO8PO( DATA8PPOhEDATAPP8PດDATAPQP reenDATAQXQPXDATAXQQQg h DATAQQXQȻDATAQ0RQ DATA0RxRQP,DATAxRR0RDATARSxRؼeenDATASPSRVDATAPSSSDATASSPSؽ [DATAS(TSRDDATA(TpTSDATApTT(Tؾ DATATUpTTDATAUHUTDATAHUUUؿDATAUUHUinalDATAU VUX)DATA VhVUDATAhVV V\reenDATAVVhVgrowDATAV@WVreenDATA@WWV” FREEDATAWW@WP”FREEDATAWXW” DATAX`XW” DATA`XXXÔDATAXX`XÔ ['h2DATAX8YXĔ ['hDATA8YYXĔDATAYY8YŔDATAYZY@ŔaDATAZXZYxŔ DATAXZZZŔDATAZZXZŔxADATAZ0[Z0Ɣ DATA0[x[ZpƔk,'h'DATAx[[0[ǔDATA[\x[Hǔts.pDATA\P\[ǔDATAP\\\ǔ DATA\\P\ǔDATA\(]\@Ȕ _forDATA(]p]\ȔepeaDATAp]](]ȔDATA]^p]ɔ,p1)DATA^H^]HɔV,lenDATAH^^^ɔDATA^^H^ʔ REEDATA^ _^Hʔ',[DATA _h_^ʔ,'brDATAh__ _ʔ r',[DATA__h_˔d',[DATA_@`_˔ DATA@``_˔ DATA``@` ̔dDATA`a`̔XaDATAa`a`̔DATA`aaa(͔DATAaa`ap͔)al_rDATAa8ba͔DATA8bbaΔ[,lenDATAbb8bΔ,lenDATAbcbΔcaleDATAcXcbϔEanchDATAXcccϔepeaDATAccXcϔ [DATAc0dcДts.pDATA0dxdc@Д [DATAxdd0dxДDATAdexdД DATAePedєDATAPeeeHєDATAeePeєDATAe(feєVDATA(fpfeHҔFREEDATApff(fҔ DATAfgpfҔdDATAgHgfXӔdBDATAHgggӔ DATAggHgӔdNDATAg hghԔDATA hhhgԔDATAhhh hԔ|UDATAhhhh Ք)DATAh@ihՔDATA@iihՔFREEDATAii@iՔX@aDATAiji֔p2,pDATAj`ji֔ DATA`jjjהe0 trDATAjj`jה MesDATAj8kjה [DATA8kkjؔ'DATAkk8kHؔDATAklkؔDATAlXlkؔeenDATAXlllٔVDATAllXlٔDATAl0mlٔ FREEDATA0mxmlڔ,DATAxmm0mXڔDATAmnxmڔ [ [DATAnPnmڔ9DATAPnnn@۔ DATAnnPnx۔ ,[[DATAn(on۔ tDATA(oponܔ DATApoo(oHܔ DATAoppoܔDATApHpoܔ DATAHpppݔ@DATAppHpHݔܰDATAp qpݔ)DATA qhqpݔDATAhqq q(ޔxADATAqqhq`ޔYDATAq@rqޔreenDATA@rrq0ߔ 8DATArr@rpߔa<8DATArsrat,rDATAs`sr@ reenDATA`sssDATAss`sDATAs8tsDATA8tts8ulesDATAtt8txVat,rDATAtutDATAuXut8 DATAXuuuxDATAuuXuDATAu0vu @DDATA0vxvu@9DATAxvv0v1DATAvwxv DATAwPwv( DATAPwwwDATAwwPw DATAw(xwFREEDATA(xpxwHDATApxx(xDATAxypxDATAyHyx)DATAHyyy`:onDATAyyHyeat,DATAy zy(repDATA zy_scaDATAhzpi = 3.1415926DATAz7DATAzdef lrepeat(num,l):DATA ({ res = []DATAh{ for i in range(num):DATA{ res.extend(l)enDATA{ return resDATA8|def lcat(la,lb):eenDATA| la.extend(lb)DATA | return laDATA}DATA\8}def b_straight(repeat,rotF,curve,length,branch_scale,lenscale,branch_angle,resolutionV,p1):DATA} grow_rules = [DATA ~ ['h', EEDATAH~ ['e','lf','h']DATA~ ],DATA~ ['lf', []DATA ],5DATA@ ]EDATAx terminal_rules = [DATA  ['g',DATAX lrepeat(resolutionV,[['a',(length / resolutionV)],['rS',curve],['rF',rotF]])rDATA ],DATA  ['a',[DATA ['rS',pi * 0.5]EEDATAP ]],DATA ]DATA axiom = ['a','h']DDATA, return [axiom,grow_rules,terminal_rules]DATAhef DATA\def b_fork1_2d(repeat,rotF,curve,length,branch_scale,lenscale,branch_angle,resolutionV,p1):DATA0 grow_rules = [DATA,p ['h', EDATA<Ѓ lcat(lrepeat(repeat,['e',['br','h']]),['lf','h'])EDATA@ ],DATAx ['lf', []DATA ],f'DATA ]DATA( terminal_rules = [DATA p ['a',[EEDATA ['rS',pi * 0.5]DATA ]],DATA 8 ['g',REEDATAXx lrepeat(resolutionV,[['a',(length / resolutionV)],['rS',curve],['rF',rotF]])DATA ],DATA 8 ['br',[DATATx ['s',branch_scale,lenscale],['rU',branch_angle],['rS',- (p1 - 0.5) * pi]DATA ]],DATA8 ]DATAp axiom = ['a','h']DATA, return [axiom,grow_rules,terminal_rules]DATAeenDATA\Pdef b_fork1_3d(repeat,rotF,curve,length,branch_scale,lenscale,branch_angle,resolutionV,p1):DATA grow_rules = [DATA,  ['h', EDATA< lcat(lrepeat(repeat,['e',['br','h']]),['lf','h'])EDATA ],DATA( ['lf', []REEDATAh ],DATA ]DATA؋ terminal_rules = [DATA  ['a',[`DATA` ['rS',pi * 0.5]DATA ]],DATA 茔 ['g',`DATAX( lrepeat(resolutionV,[['a',(length / resolutionV)],['rS',curve],['rF',rotF]])DATA ],DATA 荔 ['br',['DATAh( ['s',branch_scale,lenscale],['rS',- (p1 - 0.5) * pi],['rF',-pi * 0.5],['rS',-branch_angle] DATA ]],rDATA ]DATA0 axiom = ['a','h']DATA,x return [axiom,grow_rules,terminal_rules]DATA؏ef DATA`def b_split2_2d(repeat,rotF,curve,length,branch_scale,lenscale,branch_angle,resolutionV,p1):DATA grow_rules = [DATA  ['h', DATAL  lcat(lrepeat(repeat,['e','cr',['br','h2'],['bl','h2']]),['lf'])1EDATA ],5DATA ؑ ['h2', EDATAH lcat(lrepeat(repeat,['e','cl',['br','h'],['bl','h']]),['lf'])DATA ],DATAȒ ['lf', []DATA ],f'DATA@ ]DATAx terminal_rules = [DATA  ['g', ['DATAX lrepeat(resolutionV,[['a',(length / resolutionV)],['rS',curve],['rF',rotF]])DATA ],DATA  ['a',[DATA ['rS',pi * 0.5]EEDATAP ]],DATA  ['br',[EDATA<ȕ ['s',branch_scale,lenscale],['rU',branch_angle]DATA8 ]],DATA p ['bl',[EDATA< ['s',branch_scale,lenscale],['rU',-branch_angle]EDATA  ]],DATA X ['cr',[DATA$ ['rU',(p1 - 0.5) * pi]DATA ]],,DATA ( ['cl',[EDATA$h ['rU',-(p1 - 0.5) * pi]DATA ]]DATA ]DATA0 axiom = ['a','h']nDATA,x return [axiom,grow_rules,terminal_rules]EEDATAؙeenDATA`def b_split2_3d(repeat,rotF,curve,length,branch_scale,lenscale,branch_angle,resolutionV,p1):DATA grow_rules = [DATA  ['h', [ DATAD  lcat(lrepeat(repeat,['e',['br','h'],['bl','h']]),['lf'])enDATA ],DATAЛ ['lf', []DATA ],f'DATAH ]DATA terminal_rules = [DATA Ȝ ['g',DATAX lrepeat(resolutionV,[['a',(length / resolutionV)],['rS',curve],['rF',rotF]])DATA ],DATA ȝ ['a',[DATA ['rS',pi * 0.5]EEDATAX ]],DATA  ['br',[DATAdО ['s',branch_scale,lenscale],['rF',pi * 0.5],['rS',branch_angle],['rS',- (p1 - 0.5) * pi]DATAh ]],DATA  ['bl',[DATAh ['s',branch_scale,lenscale],['rF',pi * -0.5],['rS',branch_angle],['rS', (p1 - 0.5) * pi]DATAx ]]xDATA ]DATA蠔 axiom = ['a','h']DATA,0 return [axiom,grow_rules,terminal_rules]DATADATA`ȡdef b_fork1_alt_2d(repeat,rotF,curve,length,branch_scale,lenscale,branch_angle,resolutionV,p1):DATAX rep_half = repeat / 2DATA rep_odd = repeat % 25DATA袔 if rep_odd:DATA( grow_rules = [enDATAp ['h', DATA` lcat(lrepeat(rep_half,['e',['bl','h'],'e',['br','h']]),['e',['bl','h'],'lf','h2'])DATA@ ],DATA x ['h2',DATA` lcat(lrepeat(rep_half,['e',['br','h'],'e',['bl','h']]),['e',['br','h'],'lf','h'])DATAH ],DATA ['lf', []DATA ],DATA ]DATA0 else:DATAh grow_rules = [[DATA ['h', DATAP lcat(lrepeat(rep_half,['e',['bl','h'],'e',['br','h']]),['lf','h'])DATAp ],DATA ['lf', []DATA觔 ],DATA  ]DATAX terminal_rules = [DATA  ['a',[t3DATAਔ ['rS',pi * 0.5]EEDATA0 ]],eDATA h ['g',DATAX lrepeat(resolutionV,[['a',(length / resolutionV)],['rS',curve],['rF',rotF]])DATA0 ],'CDATA h ['br',[DATAT ['s',branch_scale,lenscale],['rU',branch_angle],['rS',- (p1 - 0.5) * pi]DATA0 ]],DATA h ['bl',[DATAX ['s',branch_scale,lenscale],['rU',-branch_angle],['rS',- (p1 - 0.5) * pi]DATA0 ]]DATAh ]DATA axiom = ['a','h']DATA,謔 return [axiom,grow_rules,terminal_rules]DATAHeenDATA`def b_fork1_alt_3d(repeat,rotF,curve,length,branch_scale,lenscale,branch_angle,resolutionV,p1):DATA rep_half = repeat / 2 DATAX rep_odd = repeat % 22_DATA if rep_odd:b%DATAஔ grow_rules = [orDATA( ['h', DATA`h lcat(lrepeat(rep_half,['e',['bl','h'],'e',['br','h']]),['e',['bl','h'],'lf','h2'])DATA ],DATA0 ['h2', DATA`p lcat(lrepeat(rep_half,['e',['br','h'],'e',['bl','h']]),['e',['br','h'],'lf','h'])DATA ],DATA8 ['lf', []DATAx ],DATA ]pDATA豔 else:DATA  grow_rules = [DATAh ['h', DATAP lcat(lrepeat(rep_half,['e',['bl','h'],'e',['br','h']]),['lf','h'])DATA( ],DATA` ['lf', []DATA ],DATAس ]EDATA terminal_rules = [DATA X ['a',[DATA ['rS',pi * 0.5]DATA贔 ]],DATA  ['g',DATAX` lrepeat(resolutionV,[['a',(length / resolutionV)],['rS',curve],['rF',rotF]])DATA赔 ],DATA  ['br',[rDATAd` ['s',branch_scale,lenscale],['rF',pi * 0.5],['rS',branch_angle],['rF',- (p1 - 0.5) * pi]]DATA ]],'DATA 0 ['bl',[dDATAhp ['s',branch_scale,lenscale],['rF',pi * -0.5],['rS',branch_angle],['rF',- (p1 - 0.5) * pi]DATA ]]DATA@ ]nDATAx axiom = ['a','h']DATA, return [axiom,grow_rules,terminal_rules]DATA DATA\Xdef b_fork2_2d(repeat,rotF,curve,length,branch_scale,lenscale,branch_angle,resolutionV,p1):DATA蹔 grow_rules = [DATA ( ['h', DATAHh lcat(lrepeat(repeat,['e',['br','h'],['bl','h']]),['lf','h'])5DATAດ ],DATA ['lf', []DATAX ],f'DATA ]DATAȻ terminal_rules = [DATA  ['a',[DATAP ['rS',pi * 0.5]EEDATA ]],DATA ؼ ['g', ['DATAX lrepeat(resolutionV,[['a',(length / resolutionV)],['rS',curve],['rF',rotF]])DATA ],DATA ؽ ['br',[DATAT ['s',branch_scale,lenscale],['rU',branch_angle],['rS',- (p1 - 0.5) * pi]2DATA ]],DATA ؾ ['bl',[DATAX ['s',branch_scale,lenscale],['rU',-branch_angle],['rS',- (p1 - 0.5) * pi]67DATA ]]DATAؿ ]DATA axiom = ['a','h']_DATA,X return [axiom,grow_rules,terminal_rules]DATAeenDATA`def b_fork2_alt(repeat,rotF,curve,length,branch_scale,lenscale,branch_angle,resolutionV,p1):bDATA rep_half = repeat / 2uDATA rep_odd = repeat % 2DATA” if rep_odd:DATAP” grow_rules = [DATA” ['h', eseDATA” lcat(lrepeat(rep_half,['e',['bl','h'],['br','h'],'e',['d','bl','h'],['d','br','h']]),['e',['bl','h'],['br','h'],'lf','h2'])DATAÔ ],DATAÔ ['h2', %xDATAĔ lcat(lrepeat(rep_half,['e',['d','bl','h'],['d','br','h'],'e',['bl','h'],['br','h']]),['e',['d','bl','h'],['d','br','h'],'lf','h'])DATAĔ ],DATAŔ ['lf', []DATA@Ŕ ],DATAxŔ ]EDATAŔ else:DATAŔ grow_rules = [DATA0Ɣ ['h', DATAlpƔ lcat(lrepeat(rep_half,['e',['bl','h'],['br','h'],'e',['d','bl','h'],['d','br','h']]),['lf','h'])DATAǔ ],DATAHǔ ['lf', []DATAǔ ],DATAǔ ]DATAǔ terminal_rules = [DATA @Ȕ ['a',[2_DATAȔ ['rS',pi * 0.5]EEDATAȔ ]],DATA ɔ ['g',repDATAXHɔ lrepeat(resolutionV,[['a',(length / resolutionV)],['rS',curve],['rF',rotF]])DATAɔ ],DATA ʔ ['d',[eDATAHʔ ['rF',pi * 0.5]EEDATAʔ ]],DATA ʔ ['br',[rDATAh˔ ['s',branch_scale,lenscale],['rS',- (p1 - 0.5) * pi],['rF',-pi * 0.5],['rS',-branch_angle]CONDATA˔ ]],DATA ˔ ['bl',[DATAh ̔ ['s',branch_scale,lenscale],['rS',- (p1 - 0.5) * pi],['rF',pi * 0.5],['rS',-branch_angle]DATA̔ ]]DATA̔ ]DATA(͔ axiom = ['a','h']DATA,p͔ return [axiom,grow_rules,terminal_rules]EEDATA͔eenDATA\Δdef b_fork2_3d(repeat,rotF,curve,length,branch_scale,lenscale,branch_angle,resolutionV,p1):DATAΔ grow_rules = [DATA Δ ['h',DATAHϔ lcat(lrepeat(repeat,['e',['br','h'],['bl','h']]),['lf','h'])5DATAϔ ],5DATAϔ ['lf', []DATAД ],DATA@Д ]DATAxД terminal_rules = [DATA Д ['a',[DATAє ['rS',1.5]rawDATAHє ]],DATA є ['g',DATAXє lrepeat(resolutionV,[['a',(length / resolutionV)],['rS',curve],['rF',rotF]])eDATAHҔ ],DATA Ҕ ['br',[DATAhҔ ['s',branch_scale,lenscale],['rS',- (p1 - 0.5) * pi],['rF',-pi * 0.5],['rS',-branch_angle]67DATAXӔ ]],DATA Ӕ ['bl',[DATAhӔ ['s',branch_scale,lenscale],['rS',- (p1 - 0.5) * pi],['rF',pi * 0.5],['rS',-branch_angle]DATAhԔ ]]DATAԔ ]DATAԔ axiom = ['a','h']DATA, Ք return [axiom,grow_rules,terminal_rules]DATAՔEDATAՔef DATA\Քdef b_fork3(repeat,rotF,curve,length,branch_scale,lenscale,branch_angle,resolutionV,p1):REEDATA֔ grow_rules = [DATA ֔ ['h', DATAhה lcat(lrepeat(repeat,['e',['c','b','h'],['c','d','b','h'],['c','d','d','b','h']]),['lf','h'])5DATAה ],DATAה ['lf', []DATAؔ ],DATAHؔ ]]DATAؔ terminal_rules = [DATA ؔ ['g', ['DATAXٔ lrepeat(resolutionV,[['a',(length / resolutionV)],['rS',curve],['rF',rotF]])DATAٔ ],DATA ٔ ['a',[DATAڔ ['rS',pi * 0.5]EEDATAXڔ ]],DATA ڔ ['b',[DATA<ڔ ['s',branch_scale,lenscale],['rS',branch_angle]EEDATA@۔ ]],DATA x۔ ['c',[DATA$۔ ['rU',(p1 - 0.5) * pi]py|DATAܔ ]],DATA Hܔ ['d',[EEDATA ܔ ['rF',0.66666 * pi]'DATAܔ ]]xDATAݔ ]DATAHݔ axiom = ['a','h']_DATA,ݔ return [axiom,grow_rules,terminal_rules]_rDATAݔeDATA(ޔeDATA\`ޔdef b_split3(repeat,rotF,curve,length,branch_scale,lenscale,branch_angle,resolutionV,p1):EEDATAޔ grow_rules = [DATA 0ߔ ['h', EDATAdpߔ lcat(lrepeat(repeat,['e',['c','b','h'],['c','d','b','h'],['c','d','d','b','h']]),['lf'])DATA ],DATA@ ['lf', []DATA ],f'DATA ]DATA terminal_rules = [DATA 8 ['g',DATAXx lrepeat(resolutionV,[['a',(length / resolutionV)],['rS',curve],['rF',rotF]])DATA ],DATA 8 ['a',[DATAx ['rS',pi * 0.5]DATA ]],DATA  ['b',[DATA<@ ['s',branch_scale,lenscale],['rS',branch_angle]DATA ]],DATA  ['c',[DATA$( ['rU',(p1 - 0.5) * pi]DATA ]],DATA  ['d',[DATA  ['rF',0.66666 * pi]ADATAH ]]DATA ]DATA axiom = ['a','h']DATA, return [axiom,grow_rules,terminal_rules]n.DATA`VDATA1DATADATATXhp0_hTXstemRules.pyx!hh[8DATAP!reenDATAP"DATAP8"|DATA(" DATA(p"DATAp(#DATApP# DATAH#DATAH#DATAH$ DATA X$reenDATA h$_DATAh  %DATAh`% DATA@%9DATA@&):nDATA@H& [DATA&FREEDATA`&DATA`'1(reDATA`@'ve,lDATA8'eenDATA8'VDATA8P(DATA(\DATAX(VDATAXP)DATAX) _DATA0)DATA0x*DATAx0P* eenDATAx*"[DATAP*DATAP + =DATAP`+DATA(+DATA(p+ reenDATAp( ,:DATAp,DATAH,DATAH-DATAHH-)DATA -headDATA h-\):oDATAh p.1(reDATAh. ve,lDATA@.5e,leDATA@X/_scaDATA@/def DATA/DATA`0rDATA`P0VDATA`0DATA81 DATA8P1,DATA81DATA1 ]nDATAX2WuDATAX2DATAX2DATA03`~DATA0xX3)ADATAx03esolDATAx3FREEDATAP(4`esolDATAP4 groDATAP5 = [DATA(P5 DATA(p5DATAp(5 DATAp6XDATAH6DATAH6 ['p2DATAH 7W ['pDATA 7FREEDATA h7DATAh 8DXDATAhP8DATA@8 DATA@8HVDATA@X9DATA9DATA`9def DATA`:DATA`P:VXaDATA8:DATA8; DATA8P;DATA;DATAX; DATAX<WDATAX<DATA0< reenDATA0x=XDATAx0=DATAx=DATAP>@DATAP`>)DATAP>py| DATA(>reenDATA(p0?`DATAp(?DATA p@py| DATA H X@ DATAH   @DATA  H @ DATA    ADATA h  ADATAh   B ['p2DATA  h PB ['pDATA @  CPDATA@   HCDATA  @ CDATA   CDATA `  D ['pDATA`   @Df['p'DATA  ` DFREEDATA 8  Ex5| DATA8   HE]DATA  8 E\"?DATA  EVDATAX XFgDATAXF ,[[DATAXFlrepDATA0 G,['qDATA0xXG DATAx0GDATAxGgDATAP H DATAP`HWDATAPHDATA( I DATA(p`IXDATAp(IDATAp(JDATAH`JFREEDATAHJ)DATAHKonV,DATA @K\(repDATA hK_scaDATAh L (repDATAhPL`ve,lDATA@LDATA@ MDATA@XMDATAMDATA`MVDATA`hNDATA`N DATA8NDATA80ODATA8hO DATAODATAXODATAX(P DATAXhP9DATA0PDATA0xQ DATAx0PQXaDATAxQDATAPQDATAPRDATAPXR)DATA(RDATA(pR\olutDATAp(S:utDATApS (repDATAHTHDATAHT,aDATAHTes.pDATA TDATA h8UDATAh xUVDATAhV.pyDATA@8V DATA@xVDATA@VDATAW DATA`@WXaDATA`WDATA`W DATA8XIs.pyDATA8XDATA8X DATA XJDATA X xYXaDATAX   YDATA  X YDATA 0! 0Z)DATA0!x! ZDATAx!0!ZDATA!pi = 3.1415926DATA"i =DATA8"def lrepeat(num,l):DATA " res = []DATA" for i in range(num):DATA# res.extend(l)DATAP# return resDATA#def lcat(la,lb):ionDATA# la.extend(lb)DATA $ return laDATAX$(DATA`$def s_straight(repeat,rotF,curve,length,branch_scale,lenscale,branch_angle,resolutionV,orient):DATA % grow_rules = [DATA `% ['p', EDATA<% lcat(['u'],lrepeat(repeat,['v',['tr','o','h']]))DATA& ],DATA H& ['u', 1DATA& ['q','u']DATA& ]DATA' ]DATA@' terminal_rules = [DATA ' ['u',1DATAX' lrepeat(resolutionV,[['a',(length / resolutionV)],['rS',curve],['rF',rotF]])DATAP( ],DATA ( ['q',['qDATAX( lrepeat(resolutionV,[['a',(length / resolutionV)],['rS',curve],['rF',rotF]])DATAP) ],DATA ) ['a',[EEDATA) ['rS',pi * 0.5]DATA* ]],DATA P* ['v',[DATA$* ['rF',2.0 * pi / repeat]nDATA* ]],DATA + ['o',[o'DATA`+ ['rF',orient]DATA+ ]],DATA + ['tr',[DATA< , ['s',branch_scale,lenscale],['rS',-branch_angle]EDATA, ]],'DATA, ]DATA- axiom = ['a','p']rDATA,H- return [axiom,grow_rules,terminal_rules]DATA-DATA`-def s_fork1(repeat,rotF,curve,length,branch_scale,lenscale,branch_angle,resolutionV,orient):DATAp. grow_rules = [DATA . ['p', DATA8. lcat(lrepeat(repeat,['q',['tr','h']]),['p'])DATAX/ ]h_aDATA/ ]DATA/ terminal_rules = [DATA 0 ['q',DATAXP0 lrepeat(resolutionV,[['a',(length / resolutionV)],['rS',curve],['rF',rotF]])DATA0 ],DATA 1 ['a',[erDATAP1 ['rS',pi * 0.5]DATA1 ]],DATA 1 ['tr',[DATAX2 ['s',branch_scale,lenscale],['rF',pi * 0.5],['rS',branch_angle],['rF',orient]DATA2 ]],'DATA2 ]DATA3 axiom = ['a','p']DATA,X3 return [axiom,grow_rules,terminal_rules]DATA3eenDATA3mDATAd(4def s_fork1_alt(repeat,rotF,curve,length,branch_scale,lenscale,branch_angle,resolutionV,orient):%x DATA4 rep_half = repeat / 2lDATA5 rep_odd = repeat % 2 DATAP5 if rep_odd:lt_DATA5 grow_rules = [DATA5 ['p', DATA\6 lcat(lrepeat(rep_half,['q',['tl','h'],'q',['tr','h']]),['q',['tl','h'],'p2'])1DATA6 ],DATA6 ['p2', DATAX 7 lcat(lrepeat(rep_half,['q',['tr','h'],'q',['tl','h']]),['q',['tr','h'],'p'])DATA7 ],DATA7 ]DATA8 else:DATAP8 grow_rules = [DATA8 ['p', DATAL8 lcat(lrepeat(rep_half,['q',['tl','h'],'q',['tr','h']]),['p'])REEDATAX9 ]DATA9 ]DATA9 terminal_rules = [DATA : ['q',DATAXP: lrepeat(resolutionV,[['a',(length / resolutionV)],['rS',curve],['rF',rotF]])DATA: ],DATA ; ['a',[DATAP; ['rS',pi * 0.5]DATA; ]],DATA ; ['tr',[DATAX< ['s',branch_scale,lenscale],['rF',pi * 0.5],['rS',branch_angle],['rF',orient]DATA< ]],DATA < ['tl',[DATA\= ['s',branch_scale,lenscale],['rF',-pi * 0.5],['rS',branch_angle],['rF',orient]1DATA= ]],'DATA= ]DATA> axiom = ['a','p']DATA,`> return [axiom,grow_rules,terminal_rules]DATA>,rDATA>nDATAd0?def s_fork2_alt(repeat,rotF,curve,length,branch_scale,lenscale,branch_angle,resolutionV,orient):DATA? rep_half = repeat / 2DATA@ rep_odd = repeat % 2DATAX@ if rep_odd:DATA@ grow_rules = [DATA@ ['p', REEDATA A lcat(lrepeat(rep_half,['q',['tl','h'],['tr','h'],'q',['v','tl','h'],['v','tr','h']]),['q',['tl','h'],['tr','h'],'p2']) rDATAA ],DATAB ['p2', DATAPB lcat(lrepeat(rep_half,['q',['v','tl','h'],['v','tr','h'],'q',['tl','h'],['tr','h']]),['q',['v','tl','h'],['v','tr','h'],'p'])EDATAC ],DATAHC ]]DATAC else:DATAC grow_rules = [DATAD ['p', DATAh@D lcat(lrepeat(rep_half,['q',['tl','h'],['tr','h'],'q',['v','tl','h'],['v','tr','h']]),['p'])DATAD ],DATAE ]]DATAHE terminal_rules = [DATA E ['q',DATAXE lrepeat(resolutionV,[['a',(length / resolutionV)],['rS',curve],['rF',rotF]])DATAXF ],DATA F ['v',[DATAF ['rF',pi * 0.5]DATA G ]],DATA XG ['a',[EEDATAG ['rS',pi * 0.5]DATAG ]],DATA H ['tr',[DATAX`H ['s',branch_scale,lenscale],['rF',pi * 0.5],['rS',branch_angle],['rF',orient]DATAH ]],DATA I ['tl',[DATA\`I ['s',branch_scale,lenscale],['rF',-pi * 0.5],['rS',branch_angle],['rF',orient]DATAI ]],DATA(J ]DATA`J axiom = ['a','p']DATA,J return [axiom,grow_rules,terminal_rules]DATAKeenDATA`@Kdef s_fork3(repeat,rotF,curve,length,branch_scale,lenscale,branch_angle,resolutionV,orient):DATAK grow_rules = [DATA L ['p', EDATAdPL lcat(lrepeat(repeat,['q',['x','o','h'],['w','x','o','h'],['w','w','x','o','h']]),['p'])DATAL ]DATA M ]DATAXM terminal_rules = [DATA M ['q',1EDATAXM lrepeat(resolutionV,[['a',(length / resolutionV)],['rS',curve],['rF',rotF]])DATAhN ],DATA N ['a',[DATAN ['rS',pi * 0.5]DATA0O ]],DATA hO ['o',[DATAO ['rF',orient]DATAO ]],DATA (P ['x',[DATA<hP ['s',branch_scale,lenscale],['rS',branch_angle]DATAP ]],DATA Q ['w',[DATA PQ ['rF',0.66666 * pi]EEDATAQ ]]DATAQ ]DATAR axiom = ['a','p']DATA,XR return [axiom,grow_rules,terminal_rules]CDATARDATA`Rdef s_fork2(repeat,rotF,curve,length,branch_scale,lenscale,branch_angle,resolutionV,orient):DATAS grow_rules = [DATA S ['p', eDATALT lcat(lrepeat(repeat,['q',['tl','o','h'],['tr','o','h']]),['p'])DATAT ]hDATAT ] DATAT terminal_rules = [DATA 8U ['q',REEDATAXxU lrepeat(resolutionV,[['a',(length / resolutionV)],['rS',curve],['rF',rotF]])DATAV ],DATA 8V ['a',[DATAxV ['rS',pi * 0.5]DATAV ]],DATA W ['o',[DATA@W ['rF',orient]DATAW ]],DATA W ['tr',[DATALX ['s',branch_scale,lenscale],['rF',pi * 0.5],['rS',branch_angle]ulDATAX ]],DATA X ['tl',[DATALX ['s',branch_scale,lenscale],['rF',-pi * 0.5],['rS',branch_angle]DATAxY ]]DATAY ]DATAY axiom = ['a','p']DATA,0Z return [axiom,grow_rules,terminal_rules]EWDATAZhDATAZef TXh0_9pTXrandom.py_l(`@ƕgg##5DATA0_D:\Armagan\Blender\Lsystem\New Folder\random.pyDATA(`p`ƕDATAp``(`ƕDATA`ap`Ǖ#pADATAaHa`hǕ" DATAHaaaǕDATAaaHaȕDATAa baXȕDATA bhbaȕDATAhbb bȕ DATAbbhb0ɕBDATAb@cbhɕ1DATA@ccbɕ1 DATAcc@c8ʕDATAcdcʕ FDATAd`dcʕBDATA`ddd˕5DATAdd`dp˕ DATAd8ed˕BDATA8eed ̕ANDATAee8e̕&DATAefe̕DATAfXfe(͕DATAXfff`͕DATAffXf͕NDATAf0gf Ε6' DATA0gxgfΕDATAxgg0gΕ>DATAghxg0ϕ@DATAhPhgϕDATAPhhhϕDATAhhPh(ЕEDATAh(ihЕDATA(ipihЕBDATApii(iPѕ`BDATAijpiѕDATAjHjiѕDATAHjjjҕ@DDATAjjHjHҕ 39 lDATAj kjҕDATA khkjҕDATAhkk kӕDATAkkhk`ӕDATAk@lkӕDATA@llkӕDATAll@l8ԕ|DATAlmlԕ/^DATAm`mlԕDATA`mmmՕ7DATAmm`mhՕDATAm8nmՕ-kDATA8nnm֕DATAnn8n8֕DATAnonp֕nDATAoXon֕DATAXoooוDATAooXo8ו#@DATAo0poוDATA0pxpoוDATAxpp0pؕDATApqxphؕ?DATAqPqpؕpfDATAPqqqٕ36 lDATAqqPqPٕ.00DATAq(rqٕ? DATA(rprqڕDATAprr(rXڕ'^DATArsprڕBDATAsHsrڕDATAHsss8ە.ZDATAssHsەDATAs tsەDATA thtsܕ@@DATAhtt tܕDATAtthtܕDATAt@utݕ1 02DATA@uut`ݕ1 17DATAuu@uݕ$1 00DATAuvuޕ uDATAv`vuHޕJ uDATA`vvvޕDATAvv`vߕDATAv8wvPߕ?DATA8wwvߕ,rDATAww8wߕ%BDATAwxwP)DATAxXxwFREEDATAXxxx(DATAxxXx`DATAx0yx; DATA0yxyx9DATAxyy0yx<<DATAyzxy'DATAzPzy@systDATAPzzzx DATAzzPzDATAz({zDATA({p{z8DATAp{{({DATA{|p{DATA|H|{DATAH|||PDATA||H|DATA| }|BDATA }h}|HDATAh}} }DATA}}h}%FREEDATA}@~}(ane.DATA@~~}`<| DATA~~@~DATA~~DATA`~X1DATA`<CDATA`0DATA8h,FREEDATA8DATAȀ8DDATAȀxDATAXȀDATAXDATA聕XH'DATA聕0DATA0x聕 6DATAx0CDATAx`DATAP6DATAPDATAP BDATA(DATA(pDATAp(ConsDATAp`DATAHDATAH4 DATA؅HP.CDATA؅ -orldDATA h؅DATAh H6DATAh5PainDATA@ ADATA@hDATAЇ@3DATAЇDATA`ЇXDATA`FREEDATA`DATA8(DATA8`*DATAȉ8&DATAȉ@DATAXȉhDATAX DATA芕XDATA芕0 DATA0x芕XDATAx0cDATAxDATAP8DATAPp*DATAPDATA(9DATA(pX@DATAp(DATApDATAH 9DATAHP WCDATA؎HatDATA؎  DATA h؎8DATAh p DATAhFREEDATA@>DATA@XDATAА@DATAА DATA`А(ameDATA``DATA`#DATA8d DATA8X@DATAȒ8!DATAȒpDATAXȒX)pDATAX DATA蓕X$`DATA蓕0HDATA0x蓕DATAx0DATAx(DATAP`DATAP3EDATAPDATA(HDATA(pFREEDATAp(/DATAp(2DATAH1 DATAHDATAؗH0 DATAؗ pDATA hؗDATAh DATAhPDATA@ DATA@DATAЙ@ 6LEDATAЙ BDATA`Й DATA`DATA`HDATA8DATA8@DATAț8!DATAțXDATAXț8DATAX- DATA蜕X8DATA蜕0pA!DATA0x蜕DATAx0  DATAx`DATAP!DATAP DATAP(  DATA(h !DATA(p  0 .DATAp(  ADATAp8 1 13DATAH  uDATAH -ADATAؠH0 217 lDATAؠ   48 lDATA hؠ  x.pyDATAh  DATAhP DATA@ FDATA@ DATAТ@8 DATAТ DATA`Т DATA`8FREEDATA`pDATA8LEDATA8#DATAȤ8H#DATAȤ\DATAXȤ;DATAXHDATA襕XFREEDATA襕0BDATA0x襕PDATAx0;^?DATAx<DATAPh;DATAP;DATA৕PH>1 18DATA৕(DATA(p৕DATAp(0DATApxDATAHDATAHDATAةH8DATAة xDATA hة*D>DATAh (jW>DATAhp DATA@DATA@[<?DATAЫ@HDATAЫ0DATA`ЫDATA` >DATA`pDATA8,DATA8DATAȭ8@|>DATAȭDATAXȭW>DATAXDATA讕XP2h !?DATA讕0DATA0x讕>DATAx0@DATAxDATAP c>DATAPDATAకPPFREEDATAక(3@>DATA(pక@>DATAp(( FREEDATAp,DATAHB?DATAH DATAزHX&>DATAز DATA hز3DATAh P<DATAh(DATA@( DATA@` '+Q>DATAд@ GDATAд0!DATA`дh!CDATA`!@DATA`X"\DATA8"?DATA8#EDATAȶ8x#?DATAȶ#$Ԯ>DATAXȶ@$4?DATAXx$_V>DATA跕X$%DATA跕0%@>DATA0x跕%!XDATAx0%+Q>DATAx(&DATAP`&8FREEDATAP&DATA๕P'DATA๕(P'4%?DATA(p๕'DATAp(''DATApH('FREEDATAH(DATAH(-?DATAػHP).DATAػ ),DATA hػ*&DATAh h*/DATAh*,DATA@(+,DATA@+,=DATAн@+,Z>DATAнH,-DATA`н,.4@>DATA`-%-DATAȿ8.DATAȿ. DATAXȿ/ DATAXP/DATAX/+z=DATA00 ?DATA0x@0 >DATAx00DATA•x0FREEDATA•P•1lC>DATAP•••X1DATA••P•1DATA•(Õ•1DATA(ÕpÕ•(2`DATApÕÕ(Õp2DATAÕĕpÕ2L! 1e-7:42 DATAޕ raise ValueError, \r DATALHޕ 'computed value for %s deviates too much (computed %g, expected %g)' % \DATA ޕ (name, computed, expected)EDATAߕDATA@Pߕ# -------------------- normal distribution --------------------DATAߕDATA(ߕNV_MAGICCONST = 4*exp(-0.5)/sqrt(2.0)DATA,Pverify('NV_MAGICCONST', 1.71552776992141)DATA def normalvariate(mu, sigma):?DATA, # mu = mean, sigma = standard deviationDATA`uDATA< # Uses Kinderman and Monahan method. Reference: Kinderman,DATA< # A.J. and Monahan, J.F., "Computer generation of randomDATA@x # variables using the ratio of uniform deviates", ACM TransDATA( # Math Software, 3, (1977), pp257-260.DATA@:DATA x while 1:DATA u1 = random()DATA u2 = random()DATA 8 z = NV_MAGICCONST*(u1-0.5)/u2DATA zz = z*z/4.0EDATA if zz <= -log(u2):ADATA  breakDATAP return mu+z*sigmaDATADATAD# -------------------- lognormal distribution --------------------DATAHDATA def lognormvariate(mu, sigma):DATA( return exp(normalvariate(mu, sigma)) PDATA(| DATA@`# -------------------- circular uniform -------------------- DATADATA def cunifvariate(mean, arc):DATA4X # mean: mean angle (in radians between 0 and pi)EEDATA@ # arc: range of distribution (in radians between 0 and pi)DATA0DATA0h return (mean + arc * (random() - 0.5)) % pi?DATADATAH# -------------------- exponential distribution --------------------DATAxDATAdef expovariate(lambd):DATA  # lambd: rate lambd = 1/meanDATA(H # ('lambda' is a Python reserved word)DATADATA u = random()oDATA while u <= 1e-7:DATA` u = random()DATA return -log(u)/lambdFDATADATAD # -------------------- von Mises distribution --------------------DATADATATWOPI = 2.0*piDATA verify('TWOPI', 6.28318530718)DATA`DATA def vonmisesvariate(mu, kappa):DATA8 # mu: mean angle (in radians between 0 and 2*pi)DATA0P # kappa: concentration parameter kappa (>= 0)DATA0 # if kappa = 0 generate uniform random angle WDATAADATA8H # Based upon an algorithm published in: Fisher, N.I.,DATA8 # "Statistical Analysis of Circular Data", CambridgeDATA # University Press, 1993.DATAhDATA4 # Thanks to Magnus Kessler for a correction to theDATA  # implementation of step 4.DATAXDATA if kappa <= 1e-6:DATA return TWOPI * random()DATA(DATA,` a = 1.0 + sqrt(1.0 + 4.0 * kappa * kappa)DATA( b = (a - sqrt(2.0 * a))/(2.0 * kappa)DATA  r = (1.0 + b * b)/(2.0 * b)DATAhDATA  while 1:veDATA u1 = random()DATA DATAX z = cos(pi * u1)DATA f = (1.0 + r * z)/(r + z)DATA c = kappa * (r - f)DATA8DATAp u2 = random()DATADATA< if not (u2 >= c * (2.0 - c) and u2 > c * exp(1.0 - c)):DATA X breakDATADATA u3 = random()DATA if u3 > 0.5:dDATA$P theta = (mu % TWOPI) + acos(f)DATA else:NDATA$ theta = (mu % TWOPI) - acos(f)DATA8DATAp return thetaDATADATA@# -------------------- gamma distribution --------------------DATAX9DATALOG4 = log(4.0)DATA$verify('LOG4', 1.38629436111989)DATA(DATA `def gammavariate(alpha, beta):DATA$ # beta times standard gammaDATA  ainv = sqrt(2.0 * alpha - 1.0)DATADX return beta * stdgamma(alpha, ainv, alpha - LOG4, alpha + ainv)DATAs33DATA SG_MAGICCONST = 1.0 + log(4.5)DATA,Xverify('SG_MAGICCONST', 2.50407739677627)leDATADATA(def stdgamma(alpha, ainv, bbb, ccc):s32DATA H # ainv = sqrt(2 * alpha - 1)DATA # bbb = alpha - log(4)DATA # ccc = alpha + ainvDATA(DATA` if alpha <= 0.0:DATA4 raise ValueError, 'stdgamma: alpha must be > 0.0'DATADATAH if alpha > 1.0:EDATADATA0 # Uses R.C.H. Cheng, "The generation of GammaDATA4( # variables with non-integral shape parameters",DATA4 # Applied Statistics, (1977), 26, No. 1, p71-74DATADATA 0 while 1:DATAp u1 = random() DATA u2 = random()DATA  v = log(u1/(1.0-u1))/ainvDATAP x = alpha*exp(v)DATA z = u1*u1*u2DATA r = bbb+ccc*v-xDATA8  if r + SG_MAGICCONST - 4.5*z >= 0.0 or r >= log(z):DATA return xDATADATA elif alpha == 1.0:DATAH # expovariate(1)DATA u = random()LDATA while u <= 1e-7:DATA u = random()DATAX return -log(u)DATADATA0 else: # alpha is between 0 and 1 (exclusive)DATA8DATADp # Uses ALGORITHM GS of Statistical Computing - Kennedy & GentleDATADATA  while 1:DATA` u = random()DATA b = (e + alpha)/eDATA  p = b*uDATA(  if p <= 1.0:DATAh  x = pow(p, 1.0/alpha)leDATA  else:DATA  # p > 1DATA8  x = -log((b-p)/alpha) DATA  u1 = random() uDATA0  if not (((p <= 1.0) and (u1 > exp(-x))) or- DATA40  ((p > 1) and (u1 > pow(x, alpha - 1.0)))):lDATA  breakenDATA  return xDATA ^DATAP  DATAH # -------------------- Gauss (faster alternative) --------------------DATA DATA8 gauss_next = NoneDATA def gauss(mu, sigma):DATA DATA< # When x and y are two variables from [0, 1), uniformlyDATAp # distributed, thenDATA #DATA$ # cos(2*pi*x)*sqrt(-2*log(1-y))DATA$H # sin(2*pi*x)*sqrt(-2*log(1-y))DATA #DATA< # are two *independent* variables with normal distributionDATAH # (mu = 0, sigma = 1).DATA # (Lambert Meertens)DATAD # (corrected version; bug discovered by Mike Miller, fixed by LM)DATAPREEDATA< # Multithreading note: When two threads call this functionDATA@ # simultaneously, it is possible that they will receive theDATA<h # same return value. The window is very small though. ToDATA< # avoid this, you have to use a lock around all calls. (IDATA@H # didn't want to slow this down in the serial case by using aDATA # lock here.)DATAREEDATA0 global gauss_next?DATAxDATA z = gauss_nextDATA gauss_next = None?DATA8 if z is None:DATAx x2pi = random() * TWOPIlDATA, g2rad = sqrt(-2.0 * log(1.0 - random()))>DATA( z = cos(x2pi) * g2radDATA$p gauss_next = sin(x2pi) * g2radW>DATADATA return mu + z*sigmaDATAHDATA4# -------------------- beta --------------------?DATAh*?DATA def betavariate(alpha, beta):?DATApREEDATA0 # Discrete Event Simulation in C, pp 87-88.DATAr ?DATA@ y = expovariate(alpha)DATA z = expovariate(1.0/beta)DATA return z/(y+z)DATADATA4P# -------------------- Pareto --------------------DATADATAdef paretovariate(alpha):>DATA@ # Jain, pg. 495DATADATA u = random()DATA  return 1.0 / pow(u, 1.0/alpha)DATAPDATA4# -------------------- Weibull --------------------DATADATA$(def weibullvariate(alpha, beta):DATA0 # Jain, pg. 499; bug fix courtesy Bill Arms>DATADATA u = random()DATA(X return alpha * pow(-log(u), 1.0/beta)DATADATA4# -------------------- shuffle --------------------DATA@P# Not quite a random distribution, but a standard algorithm.>DATA,# This implementation due to Tim Peters.DATA( DATA(` def shuffle(x, random=random, int=int):DATAH  """x, random=random.random -> shuffle list x in place; return None.DATA0!@?DATADh! Optional arg random is a 0-argument function returning a randomDATAD! float in [0.0, 1.0); by default, the standard random.random.DATAX"DATA@" Note that for even rather small len(x), the total number ofDATAH# permutations of x is larger than the period of most random numberDATA@x# generators; this implies that "most" permutations of a longDATA(# sequence can never be generated.DATA@$ """DATAx$DATA($ for i in xrange(len(x)-1, 0, -1):DATAD% # pick an element in x[:i+1] with which to exchange x[i]DATA$% j = int(random() * (i+1))DATA % x[i], x[j] = x[j], x[i]DATA(&Q>DATA<`&# -------------------- test program --------------------DATA&)>DATA'def test(N = 200):DATA P' print 'TWOPI =', TWOPIDATA ' print 'LOG4 =', LOG4DATA(' print 'NV_MAGICCONST =', NV_MAGICCONSTDATA(H( print 'SG_MAGICCONST =', SG_MAGICCONSTDATA ( test_generator(N, 'random()')DATA0( test_generator(N, 'normalvariate(0.0, 1.0)')EEDATA0P) test_generator(N, 'lognormvariate(0.0, 1.0)')DATA0) test_generator(N, 'cunifvariate(0.0, 1.0)')DATA(* test_generator(N, 'expovariate(1.0)')DATA0h* test_generator(N, 'vonmisesvariate(0.0, 1.0)')DATA0* test_generator(N, 'gammavariate(0.5, 1.0)')DATA0(+ test_generator(N, 'gammavariate(0.9, 1.0)')DATA0+ test_generator(N, 'gammavariate(1.0, 1.0)')DATA0+ test_generator(N, 'gammavariate(2.0, 1.0)')DATA0H, test_generator(N, 'gammavariate(20.0, 1.0)')>DATA0, test_generator(N, 'gammavariate(200.0, 1.0)')DATA(- test_generator(N, 'gauss(0.0, 1.0)')=DATA,`- test_generator(N, 'betavariate(3.0, 3.0)')DATA,- test_generator(N, 'paretovariate(1.0)')DATA0 . test_generator(N, 'weibullvariate(1.0, 1.0)')EDATA.DATA$.def test_generator(n, funccall):DATA/ import timeDATAP/ print n, 'times', funccallDATA,/ code = compile(funccall, funccall, 'eval')DATA 0 sum = 0.0?DATA@0 sqsum = 0.0REEDATA0 smallest = 1e10DATA0 largest = -1e10DATA1 t0 = time.time()>DATAX1 for i in range(n):DATA1 x = eval(code)=DATA1 sum = sum + xDATA(2 sqsum = sqsum + x*xlDATA p2 smallest = min(x, smallest)DATA2 largest = max(x, largest)DATA3 t1 = time.time()EEDATA$X3 print round(t1-t0, 3), 'sec,', H>DATA3 avg = sum/nDATA$3 stddev = sqrt(sqsum/n - avg*avg)DATA0H4 print 'avg %g, stddev %g, min %g, max %g' % \>DATA(4 (avg, stddev, smallest, largest)=DATA5>DATA85if __name__ == '__main__':DATA5 test()TXh90_TXwhrandom.py::b::hDATA4:D:\Armagan\Blender\Lsystem\New Folder\whrandom.pyDATA:8;Pb(ew FDATA8;;:b!DATA;;8;b$DATA;<;@cDATA<X<;c8DATAX<<<c$DATA<<X<PdDATA<0=<d DATA0=x=<d&DATAx==0= e*LEDATA=>x=eDATA>P>=eDATAP>>>f%DATA>>P>`f, BDATA>(?>fDATA(?p?>fDATAp??(?0gDATA?@p?hg?DATA@H@?g>DATAH@@@HhheadDATA@@H@h?DATA@ A@h-1 16DATA AhA@PiDATAhAA Ai9>DATAAAhAi3BDATAA@BA`jDATA@BBAjFREEDATABB@BjDATABCBkBDATAC`CBk=DATA`CCCkBDATACC`ChlAFREEDATAC8DCl.DATA8DDC@m'DATADD8DxmDATADEDm:DATAEXED nQDATAXEEEhnDATAEEXEnDATAE0FEnQDATA0FxFEo)ADATAxFF0FxoDATAFGxFo2FREEDATAGPGF0p4aDATAPGGGpDATAGGPGpDATAG(HGq%DATA(HpHGpq!DATApHH(Hq2DATAHIpH0r2DATAIHIHr,DATAHIIIr:DATAIIHIhs5DATAI JIsDATA JhJIt!DATAhJJ JptDATAJJhJtDATAJ@KJu"DATA@KKJXuDATAKK@KuexDATAKLKuDATAL`LKHv(DATA`LLLv'\>DATALL`LwDATAL8ML8wDATA8MMLw;DATAMM8Mw!DATAMNM@x DATANXNMx1 22DATAXNNNx uDATANNXNy uDATAN0ONXy uDATA0OxONy uDATAxOO0Oy uDATAOPxO z1 18DATAPPPOhz1 21DATAPPPPz1 13DATAPPPPz200 lDATAP(QPX{ uDATA(QpQP{1 15DATApQQ(Q{01 19DATAQRpQH|"QDATARHRQ|@(DDATAHRRR|QDATARRHR(}7QDATAR SR} 36 lDATA ShSR}1 12DATAhSS S ~'32 lDATASShSx~1 19DATAS@TS~1 01DATA@TTSDATATT@TH:DATATUT+DATAU`UTDATA`UUUPFDATAUU`UȀ:EPDATAU8VU8DATA8VVUp:DATAVV8V8s3| DATAVWVPCDATAWXWVȂ4DATAXWWW09 DATAWWXW PlDATAW0XW胖 DATA0XxXW08@:DDATAxXX0XDATAXYxX脖DATAYPYX0&DATAPYYY2DATAYYPYDATAY(ZY8 DATA(ZpZY7!DATApZZ(Z膖80 lDATAZ[pZ(DATA[H[Zp'DATAH[[[ȇ20 lDATA[[H[268 lDATA[ \[ uDATA \h\[Ȉ uDATAh\\ \7 uDATA\\h\xendDATA\@]\+QDATA@]]\DATA]]@]`+DATA]^]72 lDATA^`^]0GDATA`^^^`1 17DATA^^`^ 96 lDATA^8_^؋2CDATA8__^@.DATA__8_win DATA_`_،DATA`X`_"DATAX```h@DATA``X`CDATA`0a`DATA0axa`@DATAxaa0aBDATAabxaЎDATAbaDDATA,Pb"""Wichman-Hill random number generator.:\|DATAb DATA(bWichmann, B. A. & Hill, I. D. (1982)DATA@cAlgorithm AS 183: DATA<cAn efficient and portable pseudo-random number generatorDATA(cApplied Statistics 31 (1982) 188-190DATAPdDATA dsee also: DATA(d Correction to Algorithm AS 183DATA, e Applied Statistics 33 (1984) 123 DATAeDATA e McLeod, A. I. (1985)DATA(f A remark on Algorithm AS 183 DATA0`f Applied Statistics 34 (1985),198-200DATAfDATAfDATA0gUSE:DATA@hgwhrandom.random() yields double precision random numbers DATA@g uniformly distributed between 0 and 1.?DATAHh0 1DATA@hwhrandom.seed(x, y, z) must be called before whrandom.random()DATA0h to seed the generatorDATAPiDATA<iThere is also an interface to create multiple independentDATA4irandom generators, and to choose from other ranges.DATA`jDATAjDATAjDATADkMulti-threading note: the random number generator used here is notDATA@kthread-safe; it is possible that nearly simultaneous calls inDATADkdifferent theads return the same random value. To avoid this, youDATADhlhave to use a lock around all calls. (I didn't want to slow thisDATA0ldown in the serial case by using a lock here.)DATA@m"""DATAxmDATA<m# Translated by Guido van Rossum from C source provided by1DATA n# Adrian Baddeley.DATAhnDATAnDATAnclass whrandom:DATA,o def __init__(self, x = 0, y = 0, z = 0):DATA xo """Initialize an instance.0DATA4o Without arguments, initialize from current time.DATA80p With arguments (x, y, z), initialize from them."""eafDATAp self.seed(x, y, z)DATApDATA(q def seed(self, x = 0, y = 0, z = 0):DATA$pq """Set the seed from (x, y, z).DATA4q These must be integers in the range [0, 256)."""DATA40r if not type(x) == type(y) == type(z) == type(0):DATA0r raise TypeError, 'seeds must be integers'DATA<r if not (0 <= x < 256 and 0 <= y < 256 and 0 <= z < 256):DATA8hs raise ValueError, 'seeds must be in range(0, 256)'DATAs if 0 == x == y == z:DATA$t # Initialize from current timeDATApt import timeDATA t t = long(time.time() * 256)DATA$u t = int((t&0xffffff) ^ (t>>24))@DATAXu t, x = divmod(t, 256)DATAu t, y = divmod(t, 256)DATAu t, z = divmod(t, 256)DATA,Hv # Zero is a poor seed, so substitute 10 4DATA(v self._seed = (x or 1, y or 1, z or 1)DATAwDATA8w def random(self):DATA<w """Get the next random number in the range [0.0, 1.0)."""DATA w # This part is thread-unsafe:DATA@x # BEGIN CRITICAL SECTION DATAx x, y, z = self._seed DATAx #DATAy x = (171 * x) % 30269DATAXy y = (172 * y) % 30307DATAy z = (170 * z) % 30323DATAy #DATA z self._seed = x, y, z DATAhz # END CRITICAL SECTION 1DATAz #DATA4z return (x/30269.0 + y/30307.0 + z/30323.0) % 1.0lDATAX{ uDATA{ def uniform(self, a, b): 5DATA4{ """Get a random number in the range [a, b).""" 20DATA$H| return a + (b-a) * self.random()DATA|DATA| def randint(self, a, b):- DATA8(} """Get a random integer in the range [a, b] includingDATA$} both end points.4 lDATA} 12DATA( ~ (Deprecated; use randrange below.)"""DATA x~ return self.randrange(a, b+1)DATA~DATA def choice(self, seq):DATA<H """Choose a random element from a non-empty sequence."""DATA, return seq[int(self.random() * len(seq))]DATADATAHP def randrange(self, start, stop=None, step=1, int=int, default=None):DATA<Ȁ """Choose a random item from range(start, stop[, step]).DATA8DATA<p This fixes the problem with randint() which includes the|DATA< endpoint; in Python this is usually not what you want.DATADP Do not supply the 'int' and 'default' arguments."""DATA8Ȃ # This code is a bit messy to make it fast for theDATA<0 # common case while still doing adequate error checkingPlDATA istart = int(start)leDATA胖 if istart != start:DATA<0 raise ValueError, "non-integer arg 1 for randrange()"DATA if stop is default:DATA脖 if istart > 0:DATA(0 return int(self.random() * istart)DATA4 raise ValueError, "empty range for randrange()"DATA istop = int(stop)DATA8 if istop != stop:DATA8 raise ValueError, "non-integer stop for randrange()"DATA膖 if step == 1:DATA( if istart < istop:DATA(p return istart + int(self.random() *DATAȇ (istop - istart))dDATA4 raise ValueError, "empty range for randrange()"lDATA istep = int(step)DATAȈ if istep != step:DATA8 raise ValueError, "non-integer step for randrange()"DATAx if istep > 0:DATA, n = (istop - istart + istep - 1) / istepDATA elif istep < 0:DATA,` n = (istop - istart + istep + 1) / istepDATA else:DATA4 raise ValueError, "zero step for randrange()"REEDATA` 00DATA if n <= 0:endDATA4؋ raise ValueError, "empty range for randrange()"DATA0@ return istart + istep*int(self.random() * n)DATA DATA،DATA$# Initialize from the current timeDATAh_inst = whrandom()DATAseed = _inst.seedDATArandom = _inst.randomDATA@uniform = _inst.uniformDATArandint = _inst.randintDATAЎchoice = _inst.choiceDATArandrange = _inst.randrangeTXh9TXApplication.py0P)ȔȔGx>DATA0g:\lsystem\Application.pyDATAȔ)& DATAȔ)#DATAXȔH*2)EDATAX*6))DATA蕖X* *DATA蕖0+'t *DATA0x蕖`+*t *DATAx0+ *DATAx+.*DATAPX,0DATAP,/DATAP -DATA(X-&ԠDATA(p-&DATAp(.&DATAp`.&dDATAH.&DATAH/onV)DATAؙHH/DATAؙ /DDATA hؙ/DATAh /DATAh00rDATA@x0DATA@0 [DATAЛ@1CDATAЛP1DATA`Л1aDATA`1f',DATA`@2EW %DATA8x2 DATA82DATAȝ82|HDATAȝ@30,2DATAXȝ3DATAX3ionVDATA螖X@4(repDATA螖04ionVDATA0x螖4DATAx0 5DATAxp5DATAP5DATAP6DATAࠖPP6@DATAࠖ(6DATA(pࠖ6DATAp(07DATAp7DATAH7def DATAH8(repDATAآHP8DATAآ 8DATA hآ8DATAh (9 DATAhp9FREEDATA@9DATA@:DATAФ@P:ch_aDATAФ:esolDATA`Ф:DATA`(;DATA`p;DATA8;DATA8<aDATAȦ8P<@aDATAȦ<DATAXȦ<DATAX8= DATA觖X=(CDATA觖0=XaDATA0x觖>f',DATAx0`>DATAx>DATAP?DATAPH?x 32DATA੖P?:e,DATA੖(?FREEDATA(p੖(@es.pDATAp(`@ ], DATAp@llDATAH@ DATAH(ADATAثH`ADATAث ADATA hثADATAh 0BXaDATAhhBDATA@BDATA@BDATAЭ@@CnV):DATAЭCresoDATA`ЭCreenDATA`DFREEDATA``DxrDATA8DFREEDATA8D DATAȯ8EFREEDATAȯ`EDATAXȯE [DATAXFDATA谖XG6DATA谖0GLDATA0x谖hHzCDATAx0H)DATAxHDATAP0IDATAPhIDATAಖPIDATAಖ(IcDATA(pಖJ#FREEDATAp(hJ$DATApJDATAHJ :e,DATAH8KDATAشHxKDATAش K DATA hشL&DATAh `L DATAhLDATA@LDATA@M DATAж@hM pdefDATAжM!):DATA`жN DATA`@Ne,reDATA`xNDATA8NFREEDATA8NFREEDATAȸ88OFREEDATAȸpODATAXȸOFREEDATAXP$FREEDATA蹖XhP$FREEDATA蹖0P&DATA0x蹖QFREEDATAx0PQ&dHDATAxQ*DATAPR*DATAPhR.FREEDATA໖PRh DATA໖(SFREEDATA(p໖PS!FREEDATAp(S#FREEDATApT%):DATAHXT#FREEDATAHT%FREEDATAؽHUFREEDATAؽ @U$FREEDATA hؽU(DATAh UFREEDATAh0V!FREEDATA@V%FREEDATA@V%FREEDATAп@8W)FREEDATAпWFREEDATA`пWFREEDATA` X#FREEDATA`xX#FREEDATA8X'FREEDATA8(Y#FREEDATA8Y'FREEDATA–YFREEDATA–X–Z!FREEDATAX–––hZ%FREEDATA––X–ZFREEDATA–0Ö–Z'FREEDATA0ÖxÖ–P[+FREEDATAxÖÖ0Ö[+FREEDATAÖĖxÖ\/FREEDATAĖPĖÖp\#FREEDATAPĖĖĖ\'FREEDATAĖĖPĖ ]'FREEDATAĖ(ŖĖx]+FREEDATA(ŖpŖĖ]DATApŖŖ(Ŗ^ DATAŖƖpŖh^$DATAƖHƖŖ^%FREEDATAHƖƖƖ_'FREEDATAƖƖHƖp_FREEDATAƖ ǖƖ_(FREEDATA ǖhǖƖ`,DATAhǖǖ ǖh`%FREEDATAǖǖhǖ`'$?DATAǖ@Ȗǖa&ՠ~?DATA@ȖȖǖpa(!|?DATAȖȖ@Ȗa*FREEDATAȖɖȖ0b,FREEDATAɖ`ɖȖb!FREEDATA`ɖɖɖb#FREEDATAɖɖ`ɖ@c%FREEDATAɖ8ʖɖc'FREEDATA8ʖʖɖc%FREEDATAʖʖ8ʖHd'FREEDATAʖ˖ʖd)EDATA˖X˖ʖd'alEDATAX˖˖˖0e+FREEDATA˖˖X˖e'0)DATA˖0̖˖e+ *DATA0̖x̖˖HfFREEDATAx̖̖0̖f#FREEDATA̖͖x̖f%0)EDATA͖P͖̖0g"FREEDATAP͖͖͖g$20)DATA͖͖P͖g$FREEDATA͖(Ζ͖8h(qREEDATA(ΖpΖ͖hFREEDATApΖΖ(Ζh#FREEDATAΖϖpΖ(i'FREEDATAϖHϖΖi#FREEDATAHϖϖϖi'(6)DATAϖϖHϖ0j#q:DATAϖ(Жϖj'FREEDATA(ЖpЖϖj%h']DATApЖЖ(Ж8k)FREEDATAЖіpЖkFREEDATAіHіЖk!):DATAHііі(l%15DATAііHіl%FREEDATAі Җіl)== 3DATA ҖhҖі8m%== 2DATAhҖҖ Җm),'w'DATAҖҖhҖmdlinDATAҖ@ӖҖ(n ine(DATA@ӖӖҖn$e(0.DATAӖӖ@Ӗn$eateDATAӖԖӖ0o(1.0)DATAԖ`ԖӖo$90.0DATA`ԖԖԖo(e(0.DATAԖԖ`ԖHpon.pDATAԖ8ՖԖp#q q DATA8ՖՖԖp'q q DATAՖՖ8Ֆ0q" == DATAՖ֖Ֆq&q qqDATA֖X֖Ֆq== 6DATAX֖֖֖r# nqqDATA֖֖X֖pr%110)DATA֖0ז֖r15)DATA0זxז֖s 1):DATAxזז0זHs$le_vDATAזؖxזs8qqqqDATAؖPؖזteadiDATAPؖؖؖHt&qqqqDATAؖؖPؖt8qlllDATAؖ(ٖؖuDATA(ٖpٖؖHuDATApٖٖ(ٖu,'r'DATAٖږpٖu DATAږHږٖuDATAHږږږ0vine(DATAږږHږhvnnq)DATAږ ۖږve(0.DATA ۖhۖږve(0.DATAhۖۖ ۖ0w0atriDATAۖۖhۖwnd(rDATAۖ@ܖۖw tokeDATA@ܖܖۖxDATAܖܖ@ܖ`x$FREEDATAܖݖܖxDATAݖ`ݖܖx DATA`ݖݖݖ8y )DATAݖݖ`ݖxy DATAݖ8ޖݖyDATA8ޖޖݖyDATAޖޖ8ޖ(zDATAޖߖޖ`zDATAߖXߖޖzqqDATAXߖߖߖzDATAߖߖXߖ({-DATAߖ0ߖ{DATA0xߖ{ f,raDATAx0|ble DATAxP|$DATAP| iteDATAP|FREEDATAP } nq DATA(X}me'DATA(p} nqDATAp(} qqqqDATAp~q q DATAHP~qqqqDATAH~f,cuDATAH~qqqqDATA ~ f,leDATA h8qqqqDATAh  Zf,stDATAhqq qDATA@聗al =DATA@0qqqqDATA@p.valDATAf,foDATA`".valDATA`8qqqqDATA`qqq DATA8val DATA8qqqqDATA8XBble DATAЄ####DATAX####DATAX@%####DATAX&_to_DATA0DATA0x(_to_DATAx0xminaDATAx fmesDATAPDATAP8DATAPpDATA(DATA(pDATAp(8DATApDATAHDATAHЉ[DATAH}mDATA @zDATA hq q DATAh ogle.DATAhPfqqqqDATA@荗FREEDATA@1.0)DATA@hDATAFREEDATA`菗qqqqDATA`8qqqqDATA`xqqqqDATA8Xch_sDATA8qqqqDATA8df,stDATAxWqqqqDATAXWcaleDATAXbqqqqDATAX Rs.vaDATA0UqqqqDATA0x0Te(teDATAx0Mles,DATAx8leafDATAPpruleDATAPruleDATAPruleDATA(@ruleDATA(pDATAp(}DATAp@DATAH DATAHPDATAHDATA xDATA hpjDATAh DATAhНDATA@NDATA@DATA@@`DATA؟DATA`DATA`HDATA`DATA8ȠDATA8DATA8PDATAkDATAXoforcDATAXHldifyDATAX裗DATA0 DATA0xhmDATAx0FREEDATAx20, DATAPȥ_.1)DATAPXs3, 1DATAPg.2)DATA(5)DATA(pЧ filDATAp( EEDATAp`nnnqDATAHvf,roDATAHPQqqqqDATAHةqqqqDATA q.0)DATA h8*v[0DATAh peratDATAhDATA@DATA@PDATA@DATAЭDATA`]DATA`hDATA`8pDATA8ௗpDATA8DATA8DATADATAXXDATAXDATAXб"DATA0(%DATA0x`DATAx0DATAxPDATAPFREEDATAPFREEDATAPFREEDATA(0FREEDATA(px$FREEDATAp(д03-JDATAp03-JDATAHP03-JDATAH03-JDATAHصDATA  .0)DATA hhot DATAh  20, DATAh DATA@ 8FREEDATA@   FREEDATA  @ FREEDATA    FREEDATA `  ` DATA`   (DATA  ` 踗1)EEDATA 8  P-FREEDATA8   not DATA  8 #qREEDATA   P 0)EDATA X   nqt DATAX   кFREEDATA  X  DATA 0  p.DATA0 x  л01DATAx  0 81DATA x |DATAP 0DATAPx}FREEDATAP( DATA(p}FREEDATA(p FREEDATAp(hDATAp(DATAHp|w()DATAH ,DATAHh|DATA —FREEDATA h`—}FREEDATAh ×.0)DATAhX×z.0)DATA@ė0)EDATA@Pėy 0.5DATA@ŗ 0.5DATAHŗ|l)EDATA`ŗFREEDATA`@Ɨ|FREEDATA`ƗDATA88Ǘ DATA8ǗFREEDATA8(ȗFREEDATApȗ,FREEDATAXȗ6FREEDATAX8ɗ8FREEDATAXɗFREEDATA0ɗFREEDATA0x(ʗFREEDATAx0xʗFREEDATAxP˗FREEDATAP˗FREEDATAPp̗FREEDATAP̗FREEDATA(͗FREEDATA(p͗FREEDATAp(ΗFREEDATApϗDATAHϗFREEDATAH0ЗFREEDATAHїFREEDATA @ї1FREEDATA hї FREEDATAh җ 03-JDATAhXҗ DATA@җffADATA@җ,.0)DATA@8ӗ(FREEDATAӗ>DATA`ԗAFREEDATA`ԗ.0)DATA`ԗFREEDATA8՗75)DATA8֗FREEDATA8ח:DATA`חFREEDATAX ؗ EEDATAXpؗFREEDATAX0ٗt,roDATA0ٗFREEDATA0x8ڗt,roDATAx0:FREEDATA xp;):DATA P ;FREEDATAP   <15DATA  P <15DATA (! =.0]DATA(!p! = repeDATAp!!(! > FREEDATA!"p!x>FREEDATA"H"!>dlinDATAH"""? al =DATA""H"@?x$DATA" #"?FREEDATA #h#"?qDATAh## # @)dDATA##h#h@== 2DATA#@$#@qnnnDATA@$$#AFREEDATA$$@$HA90.0DATA$%$A_strDATA%`%$And(tDATA`%%%(B 'l'DATA%%`%pBFREEDATA%8&%B% 'rUDATA8&&%C%):DATA&&8&pCDATA&'&C%REEDATA'X'&D%FREEDATAX'''pD75)DATA''X'DFREEDATA'0('Eate(DATA0(x('PEFREEDATAx((0(:f,leDATA()x(HF.0)DATA)P)(FDATAP))F20)DATA()######################################EDATA$)# Blender TreeMaker Script ver1.40DATAH*#cuDATA*# 2001-2005 Armagan YAVUZDATA*# DATA(+# Latest version can be obtained from:DATA,`+# www.geocities.com/blenderdungeon/)DATA+#DATA0+# This script is public domain. You can copy,EDATA4X,# distribute, and modify it in any way you like.3 DATA0,# But please keep the information above intact.DATA -# DATA(X-######################################DATA(-# #'DATA(.# PRESS ALT+P TO ACTIVATE THE SCRIPT #DATA(`.# #DATA(.######################################EDATA/DATAH/DATA/DATA/DATA/import BlenderEDATA00from lsystem import *DATAx0from rulesets import *DATA0from stemRules import *DATA1from leafRules import *DATAP1from Blender.Draw import *DATA1from Blender.BGL import *DATA1from string import stripDATA@2DATAx2version = 130EEDATA2DATA2orientation = Create(0.5)DATA4@3force = [Create(0.0), Create(90.0), Create(0.0)]DATA3scaleforce = Create(0.0)DATA3iteration= Create(2) nDATA@4resolutionLOD= Create(0.75)DATA4resolution= Create(16)EDATA4resolutionV= Create(2)DATA 5stemresolutionV= Create(2)DATAp5leafresolutionV= Create(1)DATA5repeat= Create(1)DATA6stemrepeat= Create(1)DATAP6leafrepeat= Create(1)DATA6bangle = Create(90.0)DATA6stembangle = Create(90.0)DATA07leafbangle = Create(90.0)DATA7menu= Create(5)DATA7stemmenu= Create(1)DATA8leafmenu= Create(1)DATAP8leafname= Create("a")DATA8useleaf = Create(1)DATA8leafscale = Create(1.0)DATA(9thickness = Create(0.1)DATAp9length = Create(0.5)DATA9leaflength = Create(1.0)DATA:rotF = Create(0.0)DATAP:stemrotF = Create(0.0) DATA:leafrotF = Create(0.0),DATA:curve = Create(0.0)DATA(;stemcurve = Create(0.0)DATAp;leafcurve = Create(0.0)DATA ;stemorientation = Create(0.0)DATA<conism = Create(0.05)DATAP<shorten = Create(0.05)DATA<branch_scale = Create(0.75)DATA <stembranch_scale = Create(0.75)DATA8=lenscale = Create(0.75)DATA=stemlenscale = Create(0.75)DATA=prune = Create(0.0)DATA>prunefirst = Create(0)nDATA`>rot_rand_per = Create(0.1)DATA>rot_rand_abs = Create(0.1)DATA?leafbank = Create(0.0)DATAH?maxdepth = Create(30)DATA?randScale = Create(0.1)DATA?prune_level = Create(6)DATA(@DATA`@message = "Ready"DATA@fn = "New file"DATA @mymsg = ""DATA(ADATA`Adef writeln(f,x):DATAA f.write(str(x))DATAA f.write("\n")DATA0BDATAhBdef readint(f):DATAB return int(f.readline())DATABdef readfloat(f):DATA @C return float(f.readline())]nDATACdef readstr(f):DATAC s = (f.readline())DATAD return strip(s)DATA`Def DATADfilDATADdef do_file(save):DATAE fname = filenameDATA`E EEDATAE global mymsg, fn, message, iteration, orientation, menu, stemmenu,leafmenu,thickness, length, leaflength, rotF, stemrotF, leafrotF,conism , branch_scale, stembranch_scale, lenscale, stemlenscaleREEDATAF global prune, prunefirst, resolutionLOD, resolution, resolutionV, stemresolutionV, leafresolutionV, repeat, stemrepeat, leafrepeat, rot_rand_per,rot_rand_abs,leafname,useleaf,leafscaleDATA8G global force,scaleforce,bangle,stembangle,leafbangleEDATAPG global curve,stemcurve,leafcurve,stemorientation,leafbank,shorten,maxdepth5EDATAhH # version 1.2DATA H global randScale, prune_levelDATAHmymDATA0I uDATAhI DATAI DATAI ymDATA$J if save: message = "File saved."DATA(hJ else: message = "File loaded."REEDATAJ DATA J if save:DATA 8K try:8[]DATAxK f = open(fname,'w')DATA K except:DATA(L message = "unable to save file."DATA`L returnREEDATAL else:DATA L try:8'gDATAM f = open(fname,'r')DATA hM except:DATA$M message = "file not found."',DATAN returnREEDATA@NileDATAxN DATANBpiDATA N if save: writeln(f,version)DATA8O else:DATA pO file_version = readint(f)DATA O if version != file_version:DATA(P message = "Different version!"EEDATA(hP if save: writeln(f,iteration.val)]DATA(P else: iteration.val = readint(f)DATAQDATA(PQ if save: writeln(f,orientation.val)DATA,Q else: orientation.val = readfloat(f)DATA,R if save: writeln(f,stemorientation.val)DATA0hR else: stemorientation.val = readfloat(f)EDATARDATA S if save: writeln(f,menu.val)DATA$PS else: menu.val = readint(f)meDATA$S if save: writeln(f,stemmenu.val)DATA(T else: stemmenu.val = readint(f)EEDATA$XT if save: writeln(f,leafmenu.val)DATA(T else: leafmenu.val = readint(f)0DATAUDATA(@U if save: writeln(f,thickness.val)REEDATA,U else: thickness.val = readfloat(f))0DATAUDATA$0V if save: writeln(f,length.val)DATA(V else: length.val = readfloat(f)EEDATA(V if save: writeln(f,leaflength.val)DATA,8W else: leaflength.val = readfloat(f)opDATAWpDATA W if save: writeln(f,rotF.val)DATA$ X else: rotF.val = readfloat(f)DATA$xX if save: writeln(f,stemrotF.val)DATA(X else: stemrotF.val = readfloat(f)DATA$(Y if save: writeln(f,leafrotF.val)DATA(Y else: leafrotF.val = readfloat(f)DATAYDATA$Z if save: writeln(f,conism.val)',DATA(hZ else: conism.val = readfloat(f)EEDATAZDATA(Z if save: writeln(f,branch_scale.val)DATA,P[ else: branch_scale.val = readfloat(f)DATA,[ if save: writeln(f,stembranch_scale.val)DATA0\ else: stembranch_scale.val = readfloat(f)DATA$p\ if save: writeln(f,lenscale.val)DATA(\ else: lenscale.val = readfloat(f)DATA( ] if save: writeln(f,stemlenscale.val)DATA,x] else: stemlenscale.val = readfloat(f)DATA]qDATA$^ if save: writeln(f,prune.val)f',DATA(h^ else: prune.val = readfloat(f)fRDATA(^ if save: writeln(f,prunefirst.val)EEDATA(_ else: prunefirst.val = readint(f)DATAp_aDATA,_ if save: writeln(f,resolutionLOD.val)DATA0` else: resolutionLOD.val = readfloat(f)REEDATA(h` if save: writeln(f,resolution.val)]DATA(` else: resolution.val = readint(f)DATA(a if save: writeln(f,resolutionV.val)DATA,pa else: resolutionV.val = readint(f)DATA,a if save: writeln(f,stemresolutionV.val) DATA00b else: stemresolutionV.val = readint(f)REEDATA$b if save: writeln(f,repeat.val)',DATA$b else: repeat.val = readint(f)DATA(@c if save: writeln(f,stemrepeat.val)1|DATA(c else: stemrepeat.val = readint(f)DATA(c if save: writeln(f,leafrepeat.val)]DATA(Hd else: leafrepeat.val = readint(f)DATAdDATA(d if save: writeln(f,rot_rand_per.val)DATA,0e else: rot_rand_per.val = readfloat(f)DATA(e if save: writeln(f,rot_rand_abs.val)DATA,e else: rot_rand_abs.val = readfloat(f)DATAHf DATA$f if save: writeln(f,leafname.val)DATA(f else: leafname.val = readstr(f)DATA$0g if save: writeln(f,useleaf.val),DATA(g else: useleaf.val = readint(f)DATA(g if save: writeln(f,leafscale.val)leDATA,8h else: leafscale.val = readfloat(f)DATAh NMDATA$h if save: writeln(f,force[0].val)DATA((i else: force[0].val = readfloat(f)DATA$i if save: writeln(f,force[1].val)DATA(i else: force[1].val = readfloat(f)DATA$0j if save: writeln(f,force[2].val)DATA(j else: force[2].val = readfloat(f)DATA(j if save: writeln(f,scaleforce.val)EEDATA,8k else: scaleforce.val = readfloat(f)[DATAk DATA$k if save: writeln(f,bangle.val)DATA((l else: bangle.val = readfloat(f)]DATA(l if save: writeln(f,stembangle.val)DATA,l else: stembangle.val = readfloat(f)DATA(8m if save: writeln(f,leafbangle.val)'fDATA,m else: leafbangle.val = readfloat(f)DATAmDATA$(n if save: writeln(f,curve.val)xDATA(n else: curve.val = readfloat(f)[]DATA(n if save: writeln(f,stemcurve.val)]DATA,0o else: stemcurve.val = readfloat(f) [DATA(o if save: writeln(f,leafcurve.val)REEDATA,o else: leafcurve.val = readfloat(f)es DATAHpin_DATA$p if save: writeln(f,leafbank.val)DATA(p else: leafbank.val = readfloat(f)DATA$0q if save: writeln(f,shorten.val)DATA(q else: shorten.val = readfloat(f)DATAqef DATA$r if save: writeln(f,maxdepth.val)DATA(pr else: maxdepth.val = readint(f)[DATAr ]DATAs# added in version 1.2qDATA(Hs if save: writeln(f,randScale.val)]DATA<s elif file_version >= 120: randScale.val = readfloat(f):DATAt ]DATA(Ht if save: writeln(f,prune_level.val)EDATA<t elif file_version >= 120: prune_level.val = readint(f)s)DATAufilDATAHuileDATAu8DATA u f.close()DATAu8DATA0v ilDATAhv DATAvdef LoadButtonClick():nDATAv global filenameDATA40w Blender.Window.FileSelector(lnc,'LOAD FILE') DATAw ]DATAwdef lnc(sfn):EEDATAx global filename, fn, mymsgDATA(`x print 'The selected file was:', sfnEDATAx filename = sfnDATAx mymsg = sfnREEDATA 8y fn = mymsgDATA xy do_file(0)DATAy]DATAy DATA(z ]DATA`z ]DATAzdef SaveButtonClick():DATAz global filenameDATA0({ Blender.Window.FileSelector(snc,'SAVE FILE')DATA{ nDATA{def snc(tfn):EDATA| global filename, fn, mymsgDATA(P| print 'The selected file was:', tfn DATA| DATA| filename = tfnDATA } fnDATAX} mymsg = tfnEDATA} fn = mymsgEEDATA } do_file(1)DATA~ qDATAP~ EDATA~ cuDATA~ ]DATA ~def draw():DATA8 global mymsg, fn, message, iteration, orientation, stemorientation,menu, stemmenu,leafmenu,thickness, length, leaflength, rotF, stemrotF, leafrotF,conism , branch_scale, stembranch_scale, lenscale, stemlenscale, prune, prunefirst, resolutionLOD, resolution, resolutionV, stemresolutionV, leafresolutionV, repeat, stemrepeat, leafrepeat, rot_rand_per,rot_rand_abs,leafname,useleaf,leafscale,force,scaleforce,bangle,stembangle,leafbangleREEDATA\  global curve,stemcurve,leafcurve,leafbank,shorten,maxdepth,randScale,randThin,prune_levelDATA ]DATA聗 global filenameqqqDATA0 filename = ' 'DATAp cuDATA enDATA$ glClearColor(0.6, 0.6, 0.65, 0.0)DATA 8 glClear(GL_COLOR_BUFFER_BIT)DATA ]DATA glColor3f(0.5,0.95,0.5)DATA glRasterPos2i(30, 520)DATADX Text("TreeMaker Script 1.40 | www.geocities.com/blenderdungeon/")DATAЄ ]DATA ]DATA(@ Button("LOAD", 14, 10, 485, 50, 19,)]DATA( Button("SAVE", 15, 350, 485, 50, 19,)DATA cuDATA( glColor3f(0.9,0.95,1.0)1EDATAx glRasterPos2i(65,490)DATA  Text(fn)DATA ]DATA8 ilDATAp DATA glColor3f(0.2,0.2,0.0)DATA glRasterPos2i(20, 465)DATA8 Text("Branches:")DATA menu= Menu("Ruleset%t| Straight %x1| Arm1 2D%x10| Arm1 3D%x11| Arm1+1 2D%x4| Arm1+1 3D%x12| Split2 2D%x2| Split2 3D%x3| Arm2 2D%x5| Arm2 3D%x6| Arm2+2 %x7| Split3%x8| Arm3%x9", 2, 100, 460, 100, 18, menu.val,"Branching Pattern")DATA ]DATAЉ orientation= Slider("subOrient ", 2, 10, 360, 190, 18, orientation.val, 0.0, 1.0, 0, "Orientation of child branch.(Pattern specific)")l)DATA bangle = Slider("subSlope ", 2, 10, 380, 190, 18, bangle.val, 0.0, 180.0, 0, "Angle between child branch and parent branch")DATA|@ lenscale = Slider("subLen ", 2, 10, 340, 190, 18, lenscale.val, 0.5, 1.0, 0, "Length of child branch compared to parent"))DATA branch_scale = Slider("subThickns", 2, 10, 320, 190, 18, branch_scale.val, 0.5, 1.0, 0, "Thickness of child branch compared to parent")l)DATAp rotF= Slider("Spin ", 2, 10, 420, 190, 18, rotF.val, -360.0, 360.0, 0, "amount of spinning along the branch")DATAhP curve= Slider("Curve ", 2, 10, 400, 190, 18, curve.val, -360.0, 360.0, 0, "curvature of the branch")EDATA荗 resolutionV= Number("resV: ", 2, 10, 440, 85, 19, resolutionV.val, 1, 16, "Vertical resolution: Number of mesh strips at each branch segment" )2 DATA repeat= Number("repeat: ", 2, 100, 440, 100, 19, repeat.val, 1, 10, "Number of times pattern is repeated before next iteration")DATAh ]DATA glColor3f(0.2,0.1,0.0)DATA菗 glRasterPos2i(220, 465)DATA8 Text("Stem:")EDATAx stemmenu= Menu("Ruleset%t| None %x1| Straight%x2| Arm1%x3| Arm1+1%x4| Arm2%x5| Arm2+2%x6| Arm3%x7", 2, 300, 460, 100, 18, stemmenu.val, "use a special ruleset for the stem")DATAX ]DATA if (stemmenu.val != 1):DATAh stemorientation= Slider("subOrient ", 2, 210, 360, 190, 18, stemorientation.val, -180.0, 180.0, 0)REEDATAXx stembangle = Slider("subSlope ", 2, 210, 380, 190, 18, stembangle.val, 0.0, 180.0, 0)DATAX stemlenscale = Slider("subLen ", 2, 210, 340, 190, 18, stemlenscale.val, 0.2, 2.0, 0)DATAd stembranch_scale = Slider("subThickns", 2, 210, 320, 190, 18, stembranch_scale.val, 0.2, 1.0, 0)hDATAT  stemrotF= Slider("Spin ", 2, 210, 420, 190, 18, stemrotF.val, -360.0, 360.0, 0)aDATAX stemcurve= Slider("Curve ", 2, 210, 400, 190, 18, stemcurve.val, -360.0, 360.0, 0)EEDATAX0 stemresolutionV= Number("resV: ", 2, 210, 440, 85, 19, stemresolutionV.val, 1, 16)luDATAP stemrepeat= Number("repeat: ", 2, 300, 440, 100, 19, stemrepeat.val, 1, 30)EEDATA8 ]DATApDATA glColor3f(0.0,0.2,0.0)DATA glRasterPos2i(220, 300)DATA@ Text("Leaves:")ow_DATA leafmenu= Menu("Ruleset%t| EndPoint%x1|Active Point%x7| 1+1 Parallel%x2| 1+1 Perpend.%x3| 2 Parallel%x4| 2 Perpend.%x5| 2+2 Perpend.%x6| 3 Perpend.%x8", 2, 300, 295, 100, 18, leafmenu.val,"Leaf placement pattern")EDATA leafrepeat= Number("repeat: ", 2, 300, 275, 100, 19, leafrepeat.val, 1, 30,"repeat pattern this many times for each branch")DATA@ leafresolutionV= Number("resV: ", 2, 210, 275, 85, 19, leafresolutionV.val, 1, 1, "Vertical resolution for leaf carrying branches")REEDATA$ if not (leafmenu.val in [1,7]): ADATAP leafrotF= Slider("ExtraSpin ", 2, 210, 235, 190, 18, leafrotF.val, -90.0, 90.0, 0, "extra spinning for leaf-carrying branches")lDATA leafcurve= Slider("ExtraCurve ", 2, 210, 215, 190, 18, leafcurve.val, -90.0, 90.0, 0, "extra curvature for leaf-carrying branches")EDATA| leafbangle = Slider("LeafSlope ", 2, 210, 195, 190, 18, leafbangle.val, 0.0, 180.0, 0,"angle between leaf and branch")al)DATAlp leafbank = Slider("LeafOrient ", 2, 210, 175, 190, 18, leafbank.val, -90.0, 90.0, 0, "Leaf orientation")DATA leaflength= Slider("lengthMul ", 2, 210, 255, 190, 18, leaflength.val, 0.2, 5.0, 0, "Additional length adjustment for leaf carrying branches")DATAН ]DATAP useleaf = Toggle("Add Leaves",2, 210, 155, 80, 19, useleaf.val, "Add leaves")DATA leafname = String("leafobj: ",2, 300, 155, 100, 19, leafname.val, 12, "Name of Blender object that serves as a model for leaves")rDATAd@ leafscale= Slider("LeafScale ", 2, 210, 135, 190, 18, leafscale.val, 0.2, 5.0, 0, "Leaf scale")nq DATA؟ ]DATA ]DATAH]DATA glColor3f(0.0,0.0,0.2)DATAȠ glRasterPos2i(15, 300)DATA Text("Force")EDATAP scaleforce= Slider("useThickness", 2, 50, 295, 150, 18, scaleforce.val, 0.0, 1.0, 0, "Make force affect only thinner branches")DATAl force[0]= Slider("Bearing ", 2, 10, 275, 190, 18, force[0].val, 0.0, 360.0, 0, "bearing of force vector")DATAp force[1]= Slider("Elevation ", 2, 10, 255, 190, 18, force[1].val, -90.0, 90.0, 0, "elevation of force vector")DATApH force[2]= Slider("Magnitude ", 2, 10, 235, 190, 18, force[2].val, 0.0, 1.0, 0, "magnitude of force vector")REEDATA裗 ]DATA  glColor3f(0.2,0.0,0.2)DATAh glRasterPos2i(20, 215)DATA Text("Prune")EDATA prune_level= Menu("Level%t| All%x6 | All but 2%x1| All but 2-3%x2| Last two%x4| Last%x5", 2, 10, 190, 70, 18, prune_level.val,"restrict pruning to these levels")REEDATA`ȥ prune = Slider("Prob ", 2, 80, 190, 120, 18, prune.val, 0.0, 0.9, 0, "Probability of pruning")DATAtX prunefirst = Number("PruneFirst: ", 2, 100, 210, 100, 19, prunefirst.val, 0, 29, "Prune the first n iterations" )DATAh maxdepth = Number("MaxDepth: ", 2, 100, 170, 100, 19, maxdepth.val, 0, 30, "Maximum branching depth")DATA]DATAЧ glColor3f(0.2,0.2,0.2)DATA glRasterPos2i(20, 150)DATA` Text("Randomness")DATAx randScale = Slider("RnScale ", 2, 40, 125, 150, 18, randScale.val, 0.0, 0.5, 0, "randomly scale down child branches")EDATATP# randThin = Slider("RnThinDwn ", 2, 40, 125, 150, 18, randThin.val, 0.0, 1.0, 0)onDATAة rot_rand_per = Slider("RnDir ", 2, 40, 105, 150, 18, rot_rand_per.val, 0.0, 1.0, 0, "randomly change direction of child branches")"DATAt rot_rand_abs = Slider("RnTwist ", 2, 40, 85, 150, 18, rot_rand_abs.val, 0.0, 1.0, 0, "randomly twist the tree")]DATA8 ]DATAp glColor3f(0.2,0.2,0.2)DATA glRasterPos2i(220, 110)DATA Text("General")JDATAP resolution= Number("resU: ", 2, 310, 105, 90, 19, resolution.val, 3, 32, "Number of vertices in the cross-section of a branch")DATA resolutionLOD = Slider("LOD ", 2, 250, 85, 150, 18, resolutionLOD.val, 0.0, 1.0, 0, "Level-Of-Detail: Decrease resolutionU as branches get thinner.")EDATAЭ ]DATA` length= Slider("Scale ", 2, 210, 60, 190, 18, length.val, 0.0, 1.0, 0, "scale of the tree")EEDATAl thickness= Slider("Radius ", 2, 210, 40, 190, 18, thickness.val, 0.0, 0.5, 0, "thickness of the tree")DATAt8 shorten = Slider("Shorten ", 2, 10, 60, 190, 18, shorten.val, 0.0, 0.2, 0, "uniform shortening along the tree")])DATAtௗ conism= Slider("ThinDwn ", 2, 10, 40, 190, 18, conism.val, 0.0, 0.2, 0, "uniform thinning down along the tree")t]DATA]DATA glColor3f(0.9,0.95,1.0)DATA glRasterPos2i(180, 10)DATAX Text(message)DATADATA$б Button("EXIT", 1, 320, 5, 80, 25)DATA(( Button("GENERATE", 3, 10, 5, 80, 25)aDATAd iteration= Number("iteratns: ", 2, 95, 5, 80, 19, iteration.val, 1, 30, "number of iterations"))EDATA ]DATAP ]DATA ]DATA ]DATAelDATA0def event(evt, val): EEDATA(x if (evt== QKEY and not val): Exit()DATAд ]DATAdef bevent(evt):er DATAP global messageDATA if (evt== 1): Exit()DATAص elif (evt== 2): Draw()DATA  elif (evt== 14): DATAh LoadButtonClick()REEDATA  Draw()leDATA elif (evt== 15): DATA8 SaveButtonClick()DATA  Draw()]DATA elif (evt== 3): DATA$ message = "Generating mesh..." DATA ` Draw() []DATA leafobj = NoneDATA4踗 if (useleaf.val == 1) and (leafname.val != ""):enDATA0P leafobj = Blender.Object.Get(leafname.val)EEDATA if not leafobj:DATA$ message = "Leaf obj. not found"DATA P Draw()]DATA  returnEDATAк deg2rad = 3.1416 / 180.0DATA  bang = bangle.val * deg2radDATA0p nrotF = rotF.val * deg2rad / resolutionV.valDATA4л ncurve = curve.val * deg2rad / resolutionV.valDATA8 if menu.val == 1:DATA rules = b_straight(repeat.val,nrotF,ncurve,length.val,branch_scale.val,lenscale.val,bang,resolutionV.val,orientation.val)EEDATA0 elif menu.val == 2:DATAx rules = b_split2_2d(repeat.val,nrotF,ncurve,length.val,branch_scale.val,lenscale.val,bang,resolutionV.val,orientation.val)EEDATA( elif menu.val == 3:EEDATAp rules = b_split2_3d(repeat.val,nrotF,ncurve,length.val,branch_scale.val,lenscale.val,bang,resolutionV.val,orientation.val)EEDATA  elif menu.val == 4:DATAh rules = b_fork1_alt_2d(repeat.val,nrotF,ncurve,length.val,branch_scale.val,lenscale.val,bang,resolutionV.val,orientation.val)DATA( elif menu.val == 5:EDATAp rules = b_fork2_2d(repeat.val,nrotF,ncurve,length.val,branch_scale.val,lenscale.val,bang,resolutionV.val,orientation.val)DATA  elif menu.val == 6:atDATAh rules = b_fork2_3d(repeat.val,nrotF,ncurve,length.val,branch_scale.val,lenscale.val,bang,resolutionV.val,orientation.val)REEDATA— elif menu.val == 7:EEDATA`— rules = b_fork2_alt(repeat.val,nrotF,ncurve,length.val,branch_scale.val,lenscale.val,bang,resolutionV.val,orientation.val)EEDATA× elif menu.val == 8:EEDATA|X× rules = b_split3(repeat.val,nrotF,ncurve,length.val,branch_scale.val,lenscale.val,bang,resolutionV.val,orientation.val)lDATAė elif menu.val == 9:g DATA|Pė rules = b_fork3(repeat.val,nrotF,ncurve,length.val,branch_scale.val,lenscale.val,bang,resolutionV.val,orientation.val)l)DATAŗ elif menu.val == 10:DATAHŗ rules = b_fork1_2d(repeat.val,nrotF,ncurve,length.val,branch_scale.val,lenscale.val,bang,resolutionV.val,orientation.val)EEDATAŗ elif menu.val == 11:EDATA@Ɨ rules = b_fork1_3d(repeat.val,nrotF,ncurve,length.val,branch_scale.val,lenscale.val,bang,resolutionV.val,orientation.val)REEDATAƗ elif menu.val == 12:EDATA8Ǘ rules = b_fork1_alt_3d(repeat.val,nrotF,ncurve,length.val,branch_scale.val,lenscale.val,bang,resolutionV.val,orientation.val)")DATAǗDATA(ȗ stemrules = NoneDATA0pȗ stembang = stembangle.val * 3.1416 / 180.0REEDATA8ȗ nrotF = stemrotF.val * deg2rad / stemresolutionV.valEDATA<8ɗ ncurve = stemcurve.val * deg2rad / stemresolutionV.vales:DATAɗ if stemmenu.val == 1:DATAɗ passDATA(ʗ elif stemmenu.val == 2:DATAxʗ stemrules = s_straight(stemrepeat.val,nrotF,ncurve,length.val,stembranch_scale.val,stemlenscale.val,stembang,stemresolutionV.val,stemorientation.val * deg2rad)DATAP˗ elif stemmenu.val == 3:DATA˗ stemrules = s_fork1(stemrepeat.val,nrotF,ncurve,length.val,stembranch_scale.val,stemlenscale.val,stembang,stemresolutionV.val,stemorientation.val * deg2rad)DATAp̗ elif stemmenu.val == 4:DATA̗ stemrules = s_fork1_alt(stemrepeat.val,nrotF,ncurve,length.val,stembranch_scale.val,stemlenscale.val,stembang,stemresolutionV.val,stemorientation.val * deg2rad)DATA͗ elif stemmenu.val == 5:DATA͗ stemrules = s_fork2(stemrepeat.val,nrotF,ncurve,length.val,stembranch_scale.val,stemlenscale.val,stembang,stemresolutionV.val,stemorientation.val * deg2rad)DATAΗ elif stemmenu.val == 6:DATAϗ stemrules = s_fork2_alt(stemrepeat.val,nrotF,ncurve,length.val,stembranch_scale.val,stemlenscale.val,stembang,stemresolutionV.val,stemorientation.val * deg2rad)DATAϗ elif stemmenu.val == 7:DATA0З stemrules = s_fork3(stemrepeat.val,nrotF,ncurve,length.val,stembranch_scale.val,stemlenscale.val,stembang,stemresolutionV.val,stemorientation.val * deg2rad)DATAї if stemrules:DATA4@ї rules[0] = stemrules[0] # copy axiom from stemf DATA$ї rules[1].extend(stemrules[1])DATA$җ rules[2].extend(stemrules[2])06 DATAXҗDATAҗ leafrules = NoneDATA0җ leafbang = leafbangle.val * 3.1416 / 180.0DATA,8ӗ leaf_len = leaflength.val * length.vald(lDATA@ӗ nrotF = (leafrotF.val + rotF.val / leafrepeat.val)* deg2rad DATADԗ ncurve = (leafcurve.val + curve.val / leafrepeat.val)* deg2rad %xDATAԗ if leafmenu.val == 1:DATAԗ leafrules = l_endpoint(resolutionV.val,deg2rad * rotF.val / resolutionV.val,deg2rad * curve.val / resolutionV.val,leaf_len,stembranch_scale.val,leafbang,leafbank.val*deg2rad,leafresolutionV.val)DATA՗ elif leafmenu.val == 7:DATA֗ leafrules = l_activepoint(resolutionV.val,deg2rad * rotF.val / resolutionV.val,deg2rad * curve.val / resolutionV.val,leaf_len,stembranch_scale.val,leafbang,leafbank.val*deg2rad,leafresolutionV.val))DATAח elif leafmenu.val == 2:DATA`ח leafrules = l_fork1_alt_prl(leafrepeat.val,nrotF,ncurve,leaf_len,stembranch_scale.val,leafbang,leafbank.val*deg2rad,leafresolutionV.val)DATA ؗ elif leafmenu.val == 3:DATApؗ leafrules = l_fork1_alt_prp(leafrepeat.val,nrotF,ncurve,leaf_len,stembranch_scale.val,leafbang,leafbank.val*deg2rad,leafresolutionV.val)DATA0ٗ elif leafmenu.val == 4:DATAٗ leafrules = l_fork2_prl(leafrepeat.val,nrotF,ncurve,leaf_len,stembranch_scale.val,leafbang,leafbank.val*deg2rad,leafresolutionV.val)DATA8ڗ elif leafmenu.val == 5:DATA: leafrules = l_fork2_prp(leafrepeat.val,nrotF,ncurve,leaf_len,stembranch_scale.val,leafbang,leafbank.val*deg2rad,leafresolutionV.val)DATAp; elif leafmenu.val == 6:DATA; leafrules = l_fork2_alt_prp(leafrepeat.val,nrotF,ncurve,leaf_len,stembranch_scale.val,leafbang,leafbank.val*deg2rad,leafresolutionV.val)DATA< elif leafmenu.val == 8:DATA< leafrules = l_fork3_prp(leafrepeat.val,nrotF,ncurve,leaf_len,stembranch_scale.val,leafbang,leafbank.val*deg2rad,leafresolutionV.val)DATA= if leafrules:DATA$= rules[1].extend(leafrules[1])urvDATA$ > rules[2].extend(leafrules[2]) DATAx>DATA > torad = 3.1415926 / 180.0 NMDATA ? maxd = 30DATA@? if maxdepth.val > 0:EDATA? maxd = maxdepth.valqDATA? if prune_level.val == 1:DATA @ min_prune_level = 2nDATAh@ max_prune_level = 30DATA @ elif prune_level.val == 2:in_DATAA min_prune_level = 3nDATAHA max_prune_level = 30DATA A elif prune_level.val == 3:]DATAA min_prune_level = 2rDATA(B max_prune_level = 2DATA pB elif prune_level.val == 4:DATA(B min_prune_level = iteration.val -2 DATA(C max_prune_level = iteration.val -1DATA pC elif prune_level.val == 5:]DATA(C min_prune_level = iteration.val -1anDATA(D max_prune_level = iteration.val -1DATA pD elif prune_level.val == 6:]EDATAD min_prune_level = 1EDATAE max_prune_level = 30DATAPE cart_force = [cos(force[0].val * torad) * cos(force[1].val * torad) * force[2].val, sin(force[0].val * torad) * cos(force[1].val * torad) * force[2].val, sin(force[1].val * torad) * force[2].val]DATA< lsystem_build(rules[0],rules[1],rules[2],iteration.val,length.val*thickness.val,conism.val,shorten.val,resolution.val,resolutionLOD.val,rot_rand_per.val * 4.0,rot_rand_abs.val * 2.0,randScale.val,prune.val, prunefirst.val, maxd, min_prune_level, max_prune_level, cart_force, scaleforce.val,leafscale.val,leafobj)1DATAHF message = "Ready" REEDATA FRegister(draw, event, bevent)EDATAFOB HK[(OBa@N?]?????????]?????YB}?%><.;/d}y?{@>Ov*}c2V@ @6>?DOBd8? #=?>=??@???>=0hHyDATAN@OB ([hHKOBc@N R?]???????? R?]?????YB}?%><.;/d}y?|@>Ov*}coV@ @6>?DOBd8? #=?>=??@???pՅbyDATAN@OB h[(OBb@N|7?k'`????????|7?k'`?????YB}?%><.;/d~y?y@>Ov)}crSS @6>?DOBd8? #=?>=??@???PwyDATAN@OB [hOBCamera  7> 6>???-?YмҴ>?WB}?%><.;.d~y?y@>Ov-}c 7> 6>??????10482?N21>3?3zT22o*?OBdB?)d??>)d?????OB [(OBd0Os?]????????s?]?????YB}?%><.;/d}y?|@>Ov*}cV@ @6>?DOBd8? #=?>=??@???@ִ۴yDATA0O@OB ([hOBe`֘hO&?]????????&?]?????ZB}?%><.;/d}y?}@>Ov*}c☡V@ @6>?DOBd8? #=?>=??@???7<yDATAhO@OB h[(OBf@O2?k'`????????2?k'`?????XB}?%><.;.d}y?x@>Ov-}cnD @6>?DOBd8? #=?>=??@???̈yDATAO@OB [hOBg`ΘO|Y?]????????|Y?]?????WB}?%><.;.d}y?{@>Ov)}c˿V@ @6>?DOBd8? #=?>=??@???ޜ|=208yDATAO@OB [`OBh([!?]????????[!?]?????\B}?%><.;0d}y?~@>Qv+}cѿW@ @6>?DOBd8? #=?>=??@???肉(ЅyDATA(@OB `[OBi@]????????@]?????YB}?%><.;/d}y?~@>Ov)}cV@ @6>?DOBd8? #=?>=??@??? yDATA@OB [P`OBj8D6@ӈ1ҳ???Ii!"I??i!"i!"4j!"?i!"g!"j!"D6@ӈ1ҳ?????YB}%>мC-;d~yp@Ov4}c>? @6?DOBd8? #=?>=??@???HyDATA@OB P[OBkC@ӈG???Ii!"I??i!"i!"4j!"?i!"g!"j!"C@ӈG?????YB}%>мH-:d~yr@Ov3}c>|@ @6?DOBd8? #=?>=??@???HFyDATA@OB [@POBl"@R?H???Ii!"I??i!"i!"4j!"?i!"g!"j!""@R?H?????YB}%>м5-9dyr@Nv3}c>@7 @6?DOBd8? #=?>=??@???yDATA@OB @[OBLamp.001 茒[#3A(Ln A??? ?ăw???c>i?P>6ӵdb?\T?ʾq<>[#3A(Ln A?????X>+⾢F?<=fa?4>Cd53>n)-+X?DOBd8? #=?>=?@???OB [P@OBLamp.002 0 s@’1@????3???i!3?h!3??h!i!30 s@’1@?????%>ytA?DOBd8? #=?>=?@???OB P[PSOBLamp.003 HFA<@gUA????3???i!3?h!3??h!i!3FA<@gUA?????%>j[`}PWT ?DOBd8? #=?>=?@???OB PS[VPOBLamp.004 xEAN@????3???i!3?h!3??h!i!3EAN@?????%>;@M@?DOBd8? #=?>=?@???OB V[YPSOBLamp.005 @9@<@A??? y???i!3? y3i!3 y?@9@<@A?????%>ZB}ι<)d.y?Ov@"}c[^Q%@>?DOBd8? #=?>=?@???OB Y[]VOBLamp.006 ؒ6<@???I@?24???L.??2?M.4i!"4k!"4?26<@?????%>ZB}?м;d/;~yQvm@>6}c>[p@?DOBd8? #=?>=?@???OB ][P`YOBleaves(?????????????XB}?%><.;/d}y?z@>Ov*}c 7> 6>?DOBd8? #=?>=??@???8yDATA@OB P`[c]OBm ޘ'@RA2???Ii!"I??i!"i!"4j!"?i!"g!"j!"'@RA2?????ZB}%>м5-7d~yr@Nv3}c>"@7 @6?DOBd8? #=?>=??@???h‡yDATA@OB c[fP`OBLamp 6@rk@????3???i!3?h!3??h!i!36@rk@?????%> @jWJ@?DOBd8? #=?>=?@???OB f[jcOBMesh.0030??????????????XB}?%><.;/d}y?z@>Ov*}c 7> 6>?DOBd8? #=?>=?@???l̆yOB j[PmfOBMesh.004D?????????????XB}?%><.;/d}y?z@>Ov*}c 7> 6>?DOBd8? #=?>=?@???ʇyOB Pm[pjOBMesh.005J?????????????XB}?%><.;/d}y?z@>Ov*}c 7> 6>?DOBd8? #=?>=?@???0yOB p[sPmOBMesh.006hO?????????????XB}?%><.;/d}y?z@>Ov*}c 7> 6>?DOBd8? #=?>=?@???yOB s[wpOBMesh.007T?????????????XB}?%><.;/d}y?z@>Ov*}c 7> 6>?DOBd8? #=?>=?@???/yOB w[PzsOBn@0.@RK???Ii!"I??i!"i!"4j!"?i!"g!"j!".@RK?????[B}%>м5-8d}ys@Ov2}c>@7 @ 6?DOBd8? #=?>=??@???2`'yDATA0@OB Pz[}wOBo&hX3@RCjf/???Ii!"I??i!"i!"4j!"?i!"g!"j!"X3@RCjf/?????XB}%>м:-8d~ys@Ov4}c> @7 @6?DOBd8? #=?>=??@???>yDATAh@OB }[ЀPzOBp>:@RK???Ii!"I??i!"i!"4j!"?i!"g!"j!">:@RK?????YB}%>м;-9dyr@Ov4}c>x&@7 @6?DOBd8? #=?>=??@???HHyDATA@OB Ѐ[}OBqŘ!?@RK???Ii!"I??i!"i!"4j!"?i!"g!"j!"!?@RK?????YB}%>м>-:d~ys@Qv5}c>.Z+@7 @6?DOBd8? #=?>=??@???ȆƆyDATA@OB [PЀOBr/,F@RK???Ii!"I??i!"i!"4j!"?i!"g!"j!",F@RK?????[B}%>мD-;dyt@Qv5}c>&e2@7 @6?DOBd8? #=?>=??@???آ yDATA@OB P[ȊOBtrunk8Z?????????????XB}?%><.;/d}y?z@>Ov*}c 7> 6>?DOBd8? #=?>=??@???>HyDATAOB Ȋ[POBPlaneh8:>0FA????????:>0FA?????YB}?%><.;(d~y?y@>Pv*}cp^i 6>?DOBd8? #=?>=??@???apyDATAMA@&MAleaf>?>??????????>???CC ??????=? ??`????L?L?L?L==ff????DATAx`???].?? >?????DATAx??????????MA&x@MAtrunk#? +?5??o?LHl??????? Q?L>??? ??????=? ??Г????L?L?L?L==ff????DATAxГṵ̑V@?@??????=rG?">`>MAx&MAMaterial333?333?333???????????????AA ????????@?=?==???????L?L?L?L==ff????TE"ȗTEI.leaves.jpg>@?????=?@@????? @??<TEȗ"TEI.bark01.jpg<@????Xr???@@????? @??<"hTE"ȗTEI.leaves_alpha.jpg>@?????=?@@????? @??<ɑME(28MEleaves5XМȟph @p܆<jF=*?T>z<߹>DATA,pМDATAhМ8mǾz[=F6 ?#8-$@H=(?#8-k

-˾;x=>-O<Ό>]~ɾ=a>]~B>+ <ћ> dpz>n<)د> dp>~ =Z>Lcu>p$=T>Lc>Y  +u>3  3>^=3:?Q ;, >x=aQi?Q ;==D =l?|]<=S=\?|]e=r=k?dOQD="=U?dODATA,hȟDATAȟ5"""""""" " " " " " " " " """""DATA,VTexXUVTexDATAxX4   DATA<>>?>A?>?w>@|?>@D?>?>?>A?>>?>A?>?w>@|?>@D?>?>?>A?>>?>A?>?w>@|?>@D?>?>?>A?ME82(MEPlane   P 2;_]=7;k=l=(;DATADATA,DATAx8'w=)=;JQ=YqxX;L`;; x:_#="; x`G:Z:09h;=09gDATA, DATAl 5 """""""DATA, UVTex@ColDATAP 43&DATA<>>=>>>>>>=>>>>>>>=>>>>>=DATA@9ME28MEPlane.001U8Яرpx `P@2;_]=ۦ7;Zk=l= ;DATA8DATA,pЯDATAxЯ8%w='=;*|Q=x?;*`;;g {:q$=pY;g {`G:Z:09H;=09HDATA,xرDATATر5"""""""DATA,`UVTex@ColDATA(4DATAX<>`<>`<>>>x>><>|>>>>`<DATA 9ME2MEPlane.002x8зعpx `P";ɤV=:#; Tż=3#; #;\09 #;=09DATA,xعDATATع5"""""""DATA,`UVTex@ColDATA(4DATAX<>>?>?>@?>=?>?>?>?>=DATA 9ME2ŘMEPlane.003p8ØXĘп8Řpx x˜P ; @=(D:@? ?@? ??> ??> ??> ?>?> ?>@?> ?@?> DATA@8Ř9MEŘ2`ΘMEPlane.004Ƙ̘͘Șʘ͘(ǘ0ɘ 0˘P ;/Q="D:@?>@N?>@?>Y?>Y?>@N?>Y?>@N?>Y?>@N?>Y?>@N?>@?>@N?>@?>DATA@͘9ME`Θ2`֘ŘMEPlane.005]Ϙ0՘՘@јHӘ֘Ϙј ӘP{:j6^= ^g=Oh=%;DATAϘDATA,Ϙ@јDATAx@ј8 P=B=Ԅ =k=E;[ i>G!H}|~$cB=(+|8:09fB=09DATA,јHӘDATATHӘ5"""""""DATA,Ә0՘UVTex՘@Col֘DATA(0՘4DATAX՘<>>>{>>>>>>u>?>>>>{> DATA ֘9ME`֘2 ޘ`ΘMEPlane.006x?טܘHݘ@٘ ۘݘט٘ ۘP$7=|==;DATAטDATA,ט@٘DATAP@٘8}=="$18+09X=1ĸx=>09DATA,٘ ۘDATA< ۘ5"""""DATA,ۘܘUVTexHݘ@ColݘDATA(ܘ4wsDATAXHݘ<>@?>???>?=???@?>@??@?=DATA ݘ9ME ޘ2`֘MEPlane.007hߘhߘ P l(4p`=r:=N-d=f:DATAhߘDATA,ߘDATAx8><(=8;v`<]Fo0: ;c;"3ļN=); R]TX̯:j09#;t=09v DATA,DATAl5 " """" ""DATA,UVTex@ColhDATAP4DATA< ?? ?>0?> ?>=@?>@??0?>@??=0?>@??0??@??=0?? ??0?> ??=DATA@h9ME2@ ޘMEPlane.008Hk XX8 Pجu;]=09Tp=Tp=?DATA DATA,XDATAP8==09˴Q=ڜ09Wa;09)2=09DATA,8DATA05""""DATA,XUVTex@ColDATAX4DATA,<>?;?@;@??>??=DATA9ME@2@MEPlane.009ψh ( PdSZ=NZ=>Z=;DATADATA, DATAx 8Y=s=7S~Y=@~77S~DZ@7< 0~DZv=: 0~ )s@709 st=09DATA,(DATAT(5"""""""DATA,UVTexh@ColDATA(4 DATAXh<>>?>A?>?w>@|?>@D?>?>?>A?DATA 9ME@2@MEPlane.0108{ h `P-098=G=ՌԀbs09Ci a=ՌDATA,DATA05""""DATA,`UVTex@ColhDATA4DATA,<3?A??=???@7??DATAh9ME2@MEPlane.0110xX(0 Pl;HY=4m= =;DATADATA,(DATAx8F=V>^}2~T=xsM/^}2~gZ@:yY&}X/*'\>}Gql09- P- <"jY>09- DATA,0DATAT5"""""""DATA,xUVTex@ColXDATA(x4 DATAX<h>>?=@??>>>> <>>>=@??pI ~=:Gɧ] }m"=09aDATA,  DATA` 5""""""""DATA, p UVTex @Col DATAPp 4wwrrDATA <`???@A??@A??@A??=@??`???@??`???=`???@A??@??@A??=`???@??@A??@??=DATA@ 9ME@2@MEPlane.013†h ( P:0WZ=w=f=(:DATADATA, DATAx 8Q@? ?@? ?}?>}?DATA 9ME@2&@MEPlane.015(%% !(#&! #P : @="D: ?0? ?=@?@?>0?@?>=0?@?>0?>@?>=0?> ?>0? ?>=DATA@&9ME&2/@MEPlane.016@(-`.)+@/x(* ,P [=s:f<`b=:DATA@(DATA,x()DATAx)8 C?@O?C?=[?[?>@O?[?>=@O?[?>@O?>[?>=@O?>C?>@O?C?>=DATA@@/9ME/2h8&MEPlane.0170672470183 85P i ;3s=;3sT^~); J^U>); Ki<0L:\Ki0L:\DATA,834DATAl45 """""""DATA,856UVTex7@Col7DATAP643U&DATA7<Z?>Z?<@o?<Z?<?<?>@o?<?>@o?<?>@o?>?>@o?>Z?>@o?<Z?>DATA@79MEh820?/MEPlane.0199>H;(=9; =+A-A?DATA9xDATA,9H;DATAPH;8+A)A+A-++'-ADATA,;(=DATA0(=5####DATA,=>DATA>4ME0?2Dh8MEleaves5Ⱥx@A 8C???DATA,x@DATA,ADATA,8CMED2J0?MEleaves6E@G H???DATA,EDATA,@GDATA,HMEJ2hODMEleaves7iHKL N???DATA,HKDATA,LDATA,NMEhO2TJMEleaves8ضPR pS???DATA,PDATA,RDATA,pSMET28ZhOMEleaves9pVxW X???DATA,VDATA,xWDATA,XME8Z2TMEtree005 Æp|p\k[ j {@HM<΅>.ԡ=FZ>DATA,[\DATA \8L=L=*1>X5==D 0@v5==A>uv=30Z=>YФ D<5=00D<5=>$0oga"L"0ga"L># D5=0D5=>DA30>Ur5=D 05=A>+LgᢘKL*1>&5=D< 05=H<>:1=3Z=>=<[JD5==@vD5==>Ϝvl)L="l)L=>=D<5==0@vD<5==>1u==3ZZ==>[Y5==D< @v05==H<>v/ G=l<>,}!=kk>tpV=g>Xl[=*輶>u/Y7<8J>؀:'ݼ:>`ζ݆nx>?g!Ǽ3`>ҹzΐOm"=>g}3 N0O=>L2\fE;"w=>vmh߭<ځ=f0>pk =ar=>1t9V^=(F=I>ZXD=z=i>u.x<7W<?i#zB =LU?5!g{< 4<?~kb,<?!}M <=?Q$,h <4?cѴogxH=PF_9P>=h~<*a| c>NMS<=>d7A>A<)-q>ڪvw |$;x><;,'>4]q .<.>ޕNL Vօ ڃ=>=\<=]h>Iԗ 2=o>a>K <,==> oZN 2:W=>p~O><<=> JWf=0>pk<2=>v.1 ;]=>(uq2ë5ޱá;>Ȅ9Ke;W>;T@N<:>Ҷ!L<)\>塏4R =VL>[#D=>H0e=>ΥiD0䒾șq=jf>9йv;f=>&ыl 1F=?.LZx=> l.׆C%>Y<>ڍ*=G@j`&>ի95>amg y<}+O>첒=)> r><{O -><`g>m7ʇ)/2>C}>+<ވ?)¦RW5>rUt>X<.;?$h׳s7>&$;c>%(t2j<>&vxo<=?EfT6> =Z>G3e 3=`>n=l<=@=Hk>_E j/>XE="> ӆ< 9=3>6xZ7+>g==xp>_wЀU<\=Z >>Y'>=>W'3<Iۘ(MI%>N<>>S&r6>U< T> KD>Yz:>ƕ>x>! > ,L>20>%[>BE>>i8w>N4B>@6A<d>MUZ>S<>TvL]'>=>M]EJٌ>b9=>[@g%3>zF=> 0;v;(>H;=>m+>=j>QN.>L<}>8  >6Vy `C=M<=؞2?~U={=.i?=z%=9=Yj?n#*{="=j?GSl/=n た=i?sL)[#9θ==FZu?~DATA, jkDATA`k5H""""" """"!"""""""" "#" " " " $" " " " %" " " " &""""'""""("""")""""*""""+"""",""""-"""".""/" !" /" "!""!""#"""#$"#"$%"$"%&"%"&'"&"'("'"()"(")*")"*+"*"+,"+",-","-."-"./"."/"01"02"0J"13"1K"1L"23"24"35"3M"45"46"57"5N"67"68"79"7O"89"8:"9;"9P":;":<";=";Q"<="<>"=?"=R">?">@"?A"?S"@A"@B"AC"AT"BC"BD"CE"CU"DE"DF"EG"EV"FG"FH"GI"GW"HI"HJ"IK"IX"JK"KY"LM"LY"LZ"MN"MZ"NO"NZ"OP"OZ"PQ"PZ"QR"QZ"RS"RZ"ST"SZ"TU"TZ"UV"UZ"VW"VZ"WX"WZ"XY"XZ"YZ"[\"[]"[u"\^"\v"\w"]^"]_"^`"^x"_`"_a"`b"`y"ab"ac"bd"bz"cd"ce"df"d{"ef"eg"fh"f|"gh"gi"hj"h}"ij"ik"jl"j~"kl"km"ln"l"mn"mo"np"n"op"oq"pr"p"qr"qs"rt"r"st"su"tv"t"uv"v"wx"w"w"xy"x"yz"y"z{"z"{|"{"|}"|"}~"}"~"~""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""DATA,{VTexp|UVTexpDATA p|4     !!""##$  $%  %&  &''(())**++,,--..// 013223544576679889;::;=<<=?>>?A@@ACBBCEDDEGFFGIHHIKJJK101LM33MN55NO77OP99PQ;;QR==RS??STAATUCCUVEEVWGGWXIIXYKKYL1LZMMZNNZOOZPPZQQZRRZSSZTTZUUZVVZWWZXXZYYZL[\^]]^`__`baabdccdfeefhgghjiijlkklnmmnpooprqqrtsstvuuv\[\wx^^xy``yzbbz{dd{|ff|}hh}~jj~llnnpprrttvvw\wxxyyzz{{||}}~~w !!""##$$%%&&''(())**++,,--..// DATA0p<>=>===>>>>>>>@>>@>@>@>>>>>>>>>>>>>>>>>>>>>>>>>>?>???>?>???> ?> ? ? ?>0?>0?0?0?>@?>@?@?@?>P?>P?P?P?>`?>`?`?`?>p?>p??>?p?p?>>>=>=>=>=>>>>>>>>>@>>@>>@>>@>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>?>?>?>?>?>?>?>?> ?> ?> ?> ?>0?>0?>0?>0?>@?>@?>@?>@?>P?>P?>P?>P?>`?>`?>`?>`?>p?>p?>p?>p?>?>?>#!>%I=#!>%I=%I=%I=#!>%I>#!>%I>%I>%I>#!>m[>#!>m[>m[>m[>#!>%I>#!>%I>%I>%I>#!>n۶>#!>n۶>n۶>n۶>#!>m>#!>m>m>m>#!>?#!>???#!>%I?#!>%I?%I?%I?#!>I$?#!>I$?I$?I$?#!>n6?#!>n6?n6?n6?#!>$I?#!>$I?$I?$I?#!>m[?#!>m[?m[?m[?#!>۶m?#!>۶m?۶m?۶m?#!>?#!>?#!>ָ>%I=ָ>%I=#!>%I=#!>%I=ָ>%I>ָ>%I>#!>%I>#!>%I>ָ>m[>ָ>m[>#!>m[>#!>m[>ָ>%I>ָ>%I>#!>%I>#!>%I>ָ>n۶>ָ>n۶>#!>n۶>#!>n۶>ָ>m>ָ>m>#!>m>#!>m>ָ>?ָ>?#!>?#!>?ָ>%I?ָ>%I?#!>%I?#!>%I?ָ>I$?ָ>I$?#!>I$?#!>I$?ָ>n6?ָ>n6?#!>n6?#!>n6?ָ>$I?ָ>$I?#!>$I?#!>$I?ָ>m[?ָ>m[?#!>m[?#!>m[?ָ>۶m?ָ>۶m?#!>۶m?#!>۶m?ָ>?ָ>?#!>ָ>%I= >%I=ָ>??%I=ָ>m= >%I>ָ>??%I>ָ>n6> >m[>ָ>??m[>ָ>> >%I>ָ>??%I>ָ>I> >n۶>ָ>??n۶>ָ>$> >m>ָ>??m>ָ>۶> >?ָ>???ָ>$ ? >%I?ָ>??%I?ָ>m? >I$?ָ>??I$?ָ>۶-? >n6?ָ>??n6?ָ>@? >$I?ָ>??$I?ָ>%IR? >m[?ָ>??m[?ָ>Id? >۶m?ָ>??۶m?ָ>nv? >?ָ>??!>%I=!>%I=%I=%I=!>%I>!>%I>%I>%I>!>m[>!>m[>m[>m[>!>%I>!>%I>%I>%I>!>n۶>!>n۶>n۶>n۶>!>m>!>m>m>m>!>?!>???!>%I?!>%I?%I?%I?!>I$?!>I$?I$?I$?!>n6?!>n6?n6?n6?!>$I?!>$I?$I?$I?!>m[?!>m[?m[?m[?!>۶m?!>۶m?۶m?۶m?!>?!>?!>Lȝ>%I=Lȝ>%I=!>%I=!>%I=Lȝ>%I>Lȝ>%I>!>%I>!>%I>Lȝ>m[>Lȝ>m[>!>m[>!>m[>Lȝ>%I>Lȝ>%I>!>%I>!>%I>Lȝ>n۶>Lȝ>n۶>!>n۶>!>n۶>Lȝ>m>Lȝ>m>!>m>!>m>Lȝ>?Lȝ>?!>?!>?Lȝ>%I?Lȝ>%I?!>%I?!>%I?Lȝ>I$?Lȝ>I$?!>I$?!>I$?Lȝ>n6?Lȝ>n6?!>n6?!>n6?Lȝ>$I?Lȝ>$I?!>$I?!>$I?Lȝ>m[?Lȝ>m[?!>m[?!>m[?Lȝ>۶m?Lȝ>۶m?!>۶m?!>۶m?Lȝ>?Lȝ>?!>Lȝ>%I=>%I=Lȝ>??%I=Lȝ>m=>%I>Lȝ>??%I>Lȝ>n6>>m[>Lȝ>??m[>Lȝ>>>%I>Lȝ>??%I>Lȝ>I>>n۶>Lȝ>??n۶>Lȝ>$>>m>Lȝ>??m>Lȝ>۶>>?Lȝ>???Lȝ>$ ?>%I?Lȝ>??%I?Lȝ>m?>I$?Lȝ>??I$?Lȝ>۶-?>n6?Lȝ>??n6?Lȝ>@?>$I?Lȝ>??$I?Lȝ>%IR?>m[?Lȝ>??m[?Lȝ>Id?>۶m?Lȝ>??۶m?Lȝ>nv?>?Lȝ>??>\6?=\6?=>=>=\6?>\6?>>>>>\6?@>\6?@>>@>>@>\6?>\6?>>>>>\6?>\6?>>>>>\6?>\6?>>>>>\6?>\6?>>>>>\6??\6??>?>?\6??\6??>?>?\6? ?\6? ?> ?> ?\6?0?\6?0?>0?>0?\6?@?\6?@?>@?>@?\6?P?\6?P?>P?>P?\6?`?\6?`?>`?>`?\6?p?\6?p?>p?>p?\6??\6??>\6?nm?=nm?=\6?=\6?=nm?>nm?>\6?>\6?>nm?@>nm?@>\6?@>\6?@>nm?>nm?>\6?>\6?>nm?>nm?>\6?>\6?>nm?>nm?>\6?>\6?>nm?>nm?>\6?>\6?>nm??nm??\6??\6??nm??nm??\6??\6??nm? ?nm? ?\6? ?\6? ?nm?0?nm?0?\6?0?\6?0?nm?@?nm?@?\6?@?\6?@?nm?P?nm?P?\6?P?\6?P?nm?`?nm?`?\6?`?\6?`?nm?p?nm?p?\6?p?\6?p?nm??nm??\6?nm?=?=nm???=nm?=?>nm???>nm? >?@>nm???@>nm?`>?>nm???>nm?>?>nm???>nm?>?>nm???>nm?>?>nm???>nm?>??nm????nm????nm????nm??? ?nm??? ?nm?(??0?nm???0?nm?8??@?nm???@?nm?H??P?nm???P?nm?X??`?nm???`?nm?h??p?nm???p?nm?x???nm???DNA1Ё(SDNANAMED*next*prev*first*lastxyzwxminxmaxyminymax*pointergroupvalpadname[32]typesubtypeflagsaveddatalentotallen*newid*libname[24]usicon_id*propertiesid*idblock*filedataname[240]filename[240]tot*parentcurvecurblocktypeshowkeyposcurvaladrcodetotelem*data*weightsvgroup[32]sliderminslidermax*refkeyelemstr[32]elemsizeblock*ipo*fromtotkeyslurph**scripts*flagactscripttotscript*line*formatblen*nameflagsnlineslines*curl*sellcurcselc*undo_bufundo_posundo_len*compiledsizeseekpassepartalphaangleclipstaclipendlensortho_scaledrawsizeshiftxshiftyYF_dofdistYF_apertureYF_bkhtypeYF_bkhbiasYF_bkhrotscriptlinkh*rectframenrframesoffsetsfrafie_imacyclokmulti_indexlayerpassmenunribufs*anim*rrsourcepad1lastframetpageflagtotbindxrepyreptwstatwendbindcode*repbind*packedfile*previewlastupdatelastusedanimspeedgen_xgen_ygen_type*vnodetexcomaptomaptonegblendtype*object*texuvname[32]projxprojyprojzmappingofs[3]size[3]texflagcolormodelrgbkdef_varcolfacnorfacvarfacdispfacwarpfacname[160]*handle*pname*stnamesstypesvars*varstr*result*cfradata[32](*doit)()(*instance_init)()(*callback)()versionaipotype*ima*cube[6]imat[4][4]obimat[3][3]stypeviewscalenotlaycuberesdepthrecalclastsizenoisesizeturbulbrightcontrastrfacgfacbfacfiltersizemg_Hmg_lacunaritymg_octavesmg_offsetmg_gaindist_amountns_outscalevn_w1vn_w2vn_w3vn_w4vn_mexpvn_distmvn_coltypenoisedepthnoisetypenoisebasisnoisebasis2imaflagcropxmincropymincropxmaxcropymaxxrepeatyrepeatextendcheckerdistnablaiuser*plugin*coba*envloc[3]rot[3]mat[4][4]min[3]max[3]*obmodetotexenergydistspotsizespotblendhaintatt1att2shadspotsizebiassoftbufsizesampbuffersfiltertypebufflagbuftyperay_sampray_sampyray_sampzray_samp_typearea_shapearea_sizearea_sizeyarea_sizeztexactshadhalostepYF_numphotonsYF_numsearchYF_phdepthYF_useqmcYF_bufsizeYF_padYF_causticblurYF_ltradiusYF_glowintYF_glowofsYF_glowtypeYF_pad2*mtex[10]specrspecgspecbmirrmirgmirbambrambbambgambemitangspectraray_mirroralpharefspeczoffsaddtranslucencyfresnel_mirfresnel_mir_ifresnel_trafresnel_tra_ifiltertx_limittx_falloffray_depthray_depth_traharseed1seed2mode_lflarecstarclinecringchasizeflaresizesubsizeflarebooststrand_stastrand_endstrand_easesbiasshad_alphapadfrgbselpr_typeuse_nodespr_backpr_lampseptexml_flagdiff_shaderspec_shaderroughnessrefracparam[4]rmsdarkness*ramp_col*ramp_specrampin_colrampin_specrampblend_colrampblend_specramp_showpad3rampfac_colrampfac_spec*nodetree*groupfrictionfhreflectfhdistxyfrictdynamodepad2sss_radius[3]sss_col[3]sss_errorsss_scalesss_iorsss_colfacsss_texfacsss_frontsss_backsss_flagsss_presetYF_arYF_agYF_abYF_dscaleYF_dpwrYF_dsmpYF_presetYF_djitname[256]scale*bbi1j1k1i2j2k2selcol1selcol2quat[4]expxexpyexpzradrad2s*mat*imatelemsdisp**mattotcolwiresizerendersizethreshvec[3][3]alfaweightradiush1h2f1f2f3hidevec[4]mat_nrpntsupntsvresoluresolvorderuordervflaguflagv*knotsu*knotsv*bp*beztcharidxkernnurb*bevobj*taperobj*textoncurve*path*keybevpathlenbevresolwidthext1ext2resolu_renresolv_renspacemodespacinglinedistshearfsizewordspaceulposulheightxofyoflinewidth*strfamily[24]*vfont*vfontb*vfonti*vfontbisepchartotboxactbox*tbselstartselend*strinfocurinfoname[128]maxrcttotrctvartypetotvertipoextraprtbitmaskslide_minslide_max*drivereffect*mface*mtface*tface*mvert*medge*dvert*mcol*msticky*texcomesh*mselect*oc*sumohandlevdataedatafdatatotedgetotfacetotselectcubemapsizesmoothreshsubdivsubdivrsubsurftype*mr*pv*tpageuv[4][2]col[4]transptileunwrapv1v2v3v4edcodecreasedef_nr*dwtotweightco[3]no[3]co[2]indexv[4]midchildrenstartpad[2]v[2]*verts*faces*colfaces*edges*vert_edge_map*vert_face_map*map_memlevelslevel_countcurrentnewlvledgelvlpinlvlrenderlvluse_col*edge_flags*edge_creases*vert_map*edge_map*old_faces*old_edges*errormodifiersubdivTyperenderLevels*emCache*mCachedefaxispad[6]startlengthrandomizeseed*start_cap*end_cap*curve_ob*offset_oboffset[3]scale[3]merge_distfit_typeoffset_typecountaxistolerancesplit_angle*texturestrengthdirectiondefgrp_name[32]midleveltexmapping*map_objectuvlayer_name[32]uvlayer_tmp*projectors[10]*imagenum_projectorsaspectxaspectypercentfaceCountfacrepeat*objectcenterstartxstartyheightnarrowspeeddamptimeoffslifetimedeformflagparentinv[4][4]cent[3]falloff*indexartotindexforceoperationpntswopntsuopntsvopntswtypeutypevtypewfufvfwdudvdw*defvec[8][3]dvec[3]max**obpartypepar1par2par3parsubstr[32]*track*proxy*proxy_group*proxy_from*action*poseconstraintChannelsnetworkdefbasemodifiersdloc[3]orig[3]dsize[3]drot[3]dquat[4]obmat[4][4]laycolbitstransflagipoflagtrackflagupflagnlaflagprotectflagipowinscaflagscavisflagboundtypedupondupoffdupstadupendsfctimemassdampinginertiaformfactorrdampingsizefacdtdtxactcolempty_drawtypepad1[7]empty_drawsizepropsensorscontrollersactuatorsbbsize[3]actdefgameflaggameflag2softflaganisotropicFriction[3]constraintsnlastripshooks*pd*soft*dup_groupfluidsimFlagrestrictflagshapenrshapeflagpad4*fluidsimSettings*derivedDeform*derivedFinallastDataMaskcurindexactivedeflectforcefieldpdef_damppdef_rdamppdef_permf_strengthf_powermaxdistpdef_sbdamppdef_sbiftpdef_sbofttotpointtotspring*bpoint*bspringnodemassgravmediafrictrklimitphysics_speedgoalspringgoalfrictmingoalmaxgoaldefgoalvertgroupfuzzynessinspringinfrictefraintervallocalsolverflags**keystotpointkeysecondspringcolballballdampballstiffsbc_modeaeroedgeminloopsmaxloopschokepad5*scratchshow_advancedoptionsresolutionxyzpreviewresxyzrealsizeguiDisplayModerenderDisplayModeviscosityValueviscosityModeviscosityExponentgravxgravygravzanimStartanimEndgstarmaxRefineiniVelxiniVelyiniVelz*orgMesh*meshSurface*meshBBsurfdataPath[240]bbStart[3]bbSize[3]typeFlagsdomainNovecgenvolumeInitTypepartSlipValuegenerateTracersgenerateParticlessurfaceSmoothingsurfaceSubdivsunusedDNADummyparticleInfSizeparticleInfAlphafarFieldSize*meshSurfNormalsmistypehorrhorghorbhorkzenrzengzenbzenkambkfastcolexposureexprangelinfaclogfacgravityactivityBoxRadiusskytypephysicsEnginemisimiststamistdistmisthistarrstargstarbstarkstarsizestarmindiststardiststarcolnoisedofstadofenddofmindofmaxaodistaodistfacaoenergyaobiasaomodeaosampaomixaocolor*aosphere*aotableshemiresmaxiterdrawtypesubshootpsubshootenodelimmaxsublamppamapamielmaelmimaxnodeconvergenceradfacgammaselcolsxsy*lpFormat*lpParmscbFormatcbParmsfccTypefccHandlerdwKeyFrameEverydwQualitydwBytesPerSeconddwFlagsdwInterleaveEveryavicodecname[128]*cdParms*padcdSizeqtcodecname[128]codecaudio_codecvideo_bitrateaudio_bitrategop_sizerc_min_raterc_max_raterc_buffer_sizemux_packet_sizemux_ratemixratemainpad[3]*mat_override*light_overridelayflagpassflagpass_xor*avicodecdata*qtcodecdataffcodecdatacfrapsfrapefraimagesframaptothreadsframelenblurfacedgeRedgeGedgeBfullscreenxplayyplayfreqplayattribrt1rt2stereomodedimensionspresetmaximsizexschyschxaspyaspxpartsypartswinposplanesimtypesubimtypequalityscemoderendererocresrpad[2]alphamodeosafrs_secedgeintsafetyborderdisprectlayersactlaygausspostmulpostgammaposthuepostsatdither_intensitybake_osabake_filterbake_modebake_flagGIqualityGIcacheGImethodGIphotonsGIdirectYF_AAYFexportxmlYF_nobumpYF_clamprgbyfpad1GIdepthGIcausdepthGIpixelspersampleGIphotoncountGImixphotonsGIphotonradiusYF_numprocsYF_raydepthYF_AApassesYF_AAsamplesGIshadowqualityGIrefinementGIpowerGIindirpowerYF_gammaYF_exposureYF_raybiasYF_AApixelsizeYF_AAthresholdbackbuf[160]pic[160]ftype[160]col[3]framename[64]*brushtoolcornertypeeditbutflagjointrilimitdegrstepturnextr_offsdoublimitsegmentsringsverticesunwrapperuvcalc_radiusuvcalc_cubesizeuvcalc_mapdiruvcalc_mapalignuvcalc_flagimapaintselect_threshclean_threshretopo_moderetopo_paint_toolline_divellipse_divretopo_hotspotmultires_subdiv_typepad4[2]dirairbrushview*sessiondrawbrushsmoothbrushpinchbrushinflatebrushgrabbrushlayerbrushflattenbrushbrush_typetexnrtexrepttexfadetexsepaveragingdraw_flagtablet_sizetablet_strengthsymm*camera*world*setbase*basactcursor[3]twcent[3]twmin[3]twmax[3]editbutsizeselectmodeproportionalprop_mode*ed*radioframing*toolsettingsaudiomarkersjumpframe*theDagdagisvaliddagflagssculptdatazoomblendximyimspacetypeblockscale*areablockhandler[8]viewmat[4][4]viewinv[4][4]persmat[4][4]persinv[4][4]winmat1[4][4]viewmat1[4][4]viewquat[4]zfacpad0persp*ob_centre*bgpic*localvd*ri*retopo_view_data*depthsob_centre_bone[32]localviewlayactscenelockaroundcamzoompivot_lastgridgridviewpixsizenearfarcamdxcamdygridlinesviewbutgridflagmodeselecttwtypetwmodetwflagtwdrawflagtwmat[4][4]clip[4][4]*clipbbafterdrawzbufxrayflag2gridsubdivsnap_target*properties_storageverthormaskmin[2]max[2]minzoommaxzoomscrollkeeptotkeepaspectkeepzoomoldwinxoldwinyrowbutv2d*editipoipokeyactname[32]constname[32]totipopinbutofschannellockmedian[3]cursenscuractaligntabomainbmainbo*lockpointexfromshowgroupmodeltypescriptblockre_alignoldkeypresstab[7]chanshown*filelisttotfiletitle[24]dir[160]file[80]ofssortmaxnamelencollums*libfiledataretvalmenuact(*returnfunc)()(*returnfunc_event)()(*returnfunc_args)()*arg1*arg2*menup*pupmenuoopsvisiflagtree*treestoresearch_string[32]search_tsesearch_flagsdo_outlinevisstoreflagdeps_flags*cumapimanrcurtileimtypenrshowsparecentxcenty*info_str*info_spare*spare*texttopviewlinesfont_idlheightleftshowlinenrstabnumbercurrtab_setshowsyntaxunused_paddpix_per_linetxtscrolltxtbar*scriptredraws*idaspect*curfont*edittreetreetypetitle[28]fasesubfasemouse_move_redrawimafasemxmydirslidirsli_linesdirsli_sxdirsli_eydirsli_exdirsli_himaslifileselmenuitemimasli_sximasli_eyimasli_eximasli_hdssxdssydsexdseydesxdesydeexdeeyfssxfssyfsexfseydsdhfsdhfesxfesyfeexfeeyinfsxinfsyinfexinfeydnsxdnsydnwdnhfnsxfnsyfnwfnhfole[128]dor[128]file[128]dir[128]*firstdir*firstfiletopdirtotaldirshilitetopfiletotalfilesimage_sliderslider_heightslider_spacetopimatotalimacurimaxcurimay*first_sel_ima*hilite_imatotal_selectedima_redraw*cmapoutline[4]neutral[4]action[4]setting[4]setting1[4]setting2[4]num[4]textfield[4]textfield_hi[4]popup[4]text[4]text_hi[4]menu_back[4]menu_item[4]menu_hilite[4]menu_text[4]menu_text_hi[4]but_drawtypeiconfile[80]back[4]header[4]panel[4]shade1[4]shade2[4]hilite[4]grid[4]wire[4]select[4]lamp[4]active[4]group[4]group_active[4]transform[4]vertex[4]vertex_select[4]edge[4]edge_select[4]edge_seam[4]edge_sharp[4]edge_facesel[4]face[4]face_select[4]face_dot[4]normal[4]bone_solid[4]bone_pose[4]strip[4]strip_select[4]vertex_sizefacedot_sizebpad[2]syntaxl[4]syntaxn[4]syntaxb[4]syntaxv[4]syntaxc[4]movie[4]image[4]scene[4]audio[4]effect[4]plugin[4]transition[4]meta[4]bpad1[4]tuitbutstv3dtfiletipotinfotsndtacttnlatseqtimatimaseltexttoopsttimetnodebpad[4]spec[4]dupflagsavetimetempdir[160]fontdir[160]renderdir[160]textudir[160]plugtexdir[160]plugseqdir[160]pythondir[160]sounddir[160]yfexportdir[160]versionsvrmlflaggameflagswheellinescrolluiflaglanguageuserprefviewzoomconsole_bufferconsole_outmixbufsizefontsizeencodingtransoptsmenuthreshold1menuthreshold2fontname[256]themesundostepscurssizetb_leftmousetb_rightmouselight[3]tw_hotspottw_flagtw_handlesizetw_sizetextimeouttexcollectratememcachelimitframeserverportpad_rot_angleobcenter_diarvisizervibrightversemaster[160]verseuser[160]recent_filessmooth_viewtxvertbaseedgebaseareabase*sceneendxendysizexsizeyscenenrscreennrfullmainwinwinakthandler[8]*newvvec*v1*v2panelname[64]tabname[64]drawname[64]ofsxofsycontrolsnapold_ofsxold_ofsysortcounter*paneltab*v3*v4*fullwinmat[4][4]headrctwinrctheadwinwinheadertypebutspacetypewinxwinyhead_swaphead_equalwin_swapwin_equalheadbutlenheadbutofscursorspacedatauiblockspanelssubvstr[4]subversionpadsminversionminsubversiondisplaymode*curscreen*curscenefileflagsglobalfname[80]*ibuf*se1*se2*se3nrdone*stripdataorxory*instance_private_data**current_private_data*newseqstartofsendofsstartstillendstillmachinestartdispenddispmulhandsize*strip*curelemfacf0facf1*seq1*seq2*seq3seqbase*sound*hdaudiolevelpancurposstrobe*effectdataanim_preseek*oldbasep*parseq*seqbasepmetastackedgeWidthforwardwipetypefMinifClampfBoostdDistdQualitybNoCompScalexIniScaleyIniScalexFinScaleyFinxInixFinyIniyFinrotInirotFin*frameMapglobalSpeedbuttypeuserjitstaendtotpartnormfacobfacrandfactexfacrandlifeforce[3]vectsizemaxlendefvec[3]mult[4]life[4]child[4]mat[4]texmapcurmultstaticstepomattimetexspeedtexflag2negvertgroup_vvgroupname[32]vgroupname_v[32]*keysminfacusedusedelemdxdylinkotypeold*poin*oldpoinresetdistlastval*makeyqualqual2targetName[32]toggleName[32]value[32]maxvalue[32]materialName[32]damptimerdelaypropname[32]matname[32]axisflag*fromObjectsubject[32]body[32]pulsefreqtotlinks**linksinvertfreq2axisfbuttonbuttonfhathatfprecisionstr[128]*mynewinputstotslinks**slinksvalotime*actblendinprioritystrideaxisstridelengthsndnrpad1[2]makecopycopymadepad2[1]trackvolume*melinVelocity[3]localflagforceloc[3]forcerot[3]linearvelocity[3]angularvelocity[3]butstabutendminvisifacslowminloc[3]maxloc[3]minrot[3]maxrot[3]distributionint_arg_1int_arg_2float_arg_1float_arg_2toPropName[32]*toObjectbodyTypefilename[64]loadaniname[64]goaccellerationmaxspeedmaxrotspeedmaxtiltspeedrotdamptiltdampspeeddamp*sample*stream*newpackedfile*snd_soundpanningattenuationpitchmin_gainmax_gaindistancestreamlenchannelshighpriopad[10]gaindopplerfactordopplervelocitynumsoundsblendernumsoundsgameengine*lamprengobjectchildbaserollhead[3]tail[3]bone_mat[3][3]arm_head[3]arm_tail[3]arm_mat[4][4]xwidthzwidthease1ease2rad_headrad_tailbonebasechainbasepathflaglayer_protectedghostepghostsizeghosttypepathsizeghostsfghostefpathsfpathefconstflagikflagselectflag*bone*childiktree*b_bone_matschan_mat[4][4]pose_mat[4][4]pose_head[3]pose_tail[3]limitmin[3]limitmax[3]stiffness[3]ikstretch*customchanbaseproxy_layerstride_offset[3]cyclic_offset[3]reserved1autosnapactnractwidthtimeslidename[30]enforce*tariterationsrootbonesubtarget[32]orientweightgrabtarget[3]reserved2minmaxflagstickystuckcache[3]lockflagfollowflagzminzmaxvolmodeplaneorglengthbulgepivXpivYpivZaxXaxYaxZminLimit[6]maxLimit[6]extraFzchannel[32]no_rot_axisstride_axiscurmodactstartactendactoffsstridelenblendoutstridechannel[32]offs_bone[32]hasinputhasoutputdatatypesockettypenslimitstack_indexinternstack_index_extlocxlocyown_indexto_index*tosock*link*new_nodelastyoutputs*storageminiwidthcustom1custom2need_execexectotrbutrprvr*typeinfo*fromnode*tonode*fromsocknodeslinks**stackinitstacksizecur_indexalltypes*owntype(*timecursor)()(*stats_draw)()(*test_break)()cyclicmoviesamplesminspeedbokehhuesatt1t2t3fstrengthfalphakey[4]colname[32]bktyperotationpreviewgamcono_zbuffstopmaxblurbthreshshortymintablemaxtableext_in[2]ext_out[2]*curve*table*premultablecurrcliprcm[4]black[3]white[3]bwmul[3]offset[2]innerradiusratergb[3]cloneactive_rndpad[4]*layerstotlayermaxlayertotsizeTYPEcharucharshortushortintlongulongfloatdoublevoidLinkListBasevec2svec2ivec2fvec2dvec3ivec3fvec3dvec4ivec4fvec4drctirctfIDPropertyDataIDPropertyIDLibraryFileDataIpoKeyBlockKeyScriptLinkTextLineTextPackedFileCameraPreviewImageImageUserImageanimRenderResultMTexObjectTexPluginTexCBDataColorBandEnvMapImBufTexMappingLampWaveMaterialbNodeTreeGroupVFontVFontDataMetaElemBoundBoxMetaBallBezTripleBPointNurbCharInfoTextBoxCurvePathIpoDriverIpoCurveMeshMFaceMTFaceTFaceMVertMEdgeMDeformVertMColMStickyMSelectOcInfoCustomDataMultiresPartialVisibilityMDeformWeightMultiresColMultiresColFaceMultiresFaceMultiresEdgeMultiresLevelMultiresMapNodeModifierDataSubsurfModifierDataLatticeModifierDataCurveModifierDataBuildModifierDataArrayModifierDataMirrorModifierDataEdgeSplitModifierDataDisplaceModifierDataUVProjectModifierDataDecimateModifierDataSmoothModifierDataCastModifierDataWaveModifierDataArmatureModifierDataHookModifierDataSoftbodyModifierDataBooleanModifierDataLatticebDeformGroupLBufbActionbPosePartDeflectSoftBodyFluidsimSettingsDerivedMeshObHookSBVertexBodyPointBodySpringSBScratchWorldRadioBaseAviCodecDataQuicktimeCodecDataFFMpegCodecDataAudioDataSceneRenderLayerRenderDataGameFramingTimeMarkerImagePaintSettingsBrushToolSettingsBrushDataSculptDataSculptSessionSceneDagForestBGpicView3DSpaceLinkScrAreaRenderInfoRetopoViewDataViewDepthsView2DSpaceInfoSpaceIpoSpaceButsSpaceSeqSpaceFiledirentryBlendHandleSpaceOopsTreeStoreTreeStoreElemSpaceImageCurveMappingSpaceNlaSpaceTextSpaceScriptScriptSpaceTimeSpaceNodeSpaceImaSelImaDirOneSelectableImaThemeUIThemeSpacebThemeSolidLightUserDefbScreenScrVertScrEdgePanelFileGlobalStripElemStripPluginSeqSequencebSoundhdaudioMetaStackEditingWipeVarsGlowVarsTransformVarsSolidColorVarsSpeedControlVarsEffectBuildEffPartEffParticleWaveEffOopsbPropertybNearSensorbMouseSensorbTouchSensorbKeyboardSensorbPropertySensorbCollisionSensorbRadarSensorbRandomSensorbRaySensorbMessageSensorbSensorbControllerbJoystickSensorbExpressionContbPythonContbActuatorbAddObjectActuatorbActionActuatorbSoundActuatorbCDActuatorbEditObjectActuatorbSceneActuatorbPropertyActuatorbObjectActuatorbIpoActuatorbCameraActuatorbConstraintActuatorbGroupActuatorbRandomActuatorbMessageActuatorbGameActuatorbVisibilityActuatorFreeCamerabSamplebSoundListenerSpaceSoundGroupObjectBonebArmaturebPoseChannelbActionChannelSpaceActionbConstraintChannelbConstraintbKinematicConstraintbTrackToConstraintbRotateLikeConstraintbLocateLikeConstraintbMinMaxConstraintbSizeLikeConstraintbActionConstraintbLockTrackConstraintbFollowPathConstraintbDistanceLimitConstraintbRotationConstraintbStretchToConstraintbLocLimitConstraintbRotLimitConstraintbSizeLimitConstraintbRigidBodyJointConstraintbClampToConstraintbActionModifierbActionStripbNodeStackbNodeSocketbNodeLinkbNodebNodePreviewbNodeTypeNodeImageAnimNodeBlurDataNodeHueSatNodeImageFileNodeChromaNodeGeometryNodeVertexColNodeDefocusCurveMapPointCurveMapBrushCloneCustomDataLayerTLEN  L4(Thxh tx T8pDDlh8$88\,< @ @ 44DX`Dt<<<\h`4@t( <(,((0@XP Lt<$x$(h x  8x h (88,@0,HhH,(lDLP@< <@Lh48<8l(DlP<,4D4,,D,@,<4` <$t (@  ,<STRC                 !"#$ %&'( )*+, -./01 234* 56789 :;<=!!!>?@" ABC D!E!FGHIJK L#MNB -$OPQRSTUVWXYZ[\6 ]%^_& `abcdefghij'! k(l)mfnopqrstuvwx#y%z{|}~ *+,-   .)&/#&.0+'1QRfp,4dabc&6'-/02+34QR   * 6 ]465p  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHI/J/KLMNOPQRS* 6T67UVWXYZ[\]^_`abcdefghijklmno ]8pq9-#y:::;rstuvwxyz{|}~<;r  65= >???>=@\A^B9;r  +++6C5 \D)8888A@@D+'+EEE>='+  *DF);r 65GHIJKLMNFOP QQQ\RS I GKTLTJMNOH'UVUWX Y YYJ W V X   ZR QQSGK[[[\[ !"B # $][ +^[ +%&_[ '()*` [ +++,+-+./0(123B4a[ 56b[ 7Bc [ ,89:;<=+>?@d [ +A'BBCDE?@e[ FGf[ H;Ig[ +HM;h[ +J;,8+>KLMNOP=@?QRi[ So\+;j [ +TUVWXYk[ l[ +Zm[\]^\_`abcdefg>h6Lnnn;iPjo#k+l+fmnopq+$+r+s+t+u6C;rpvqw - x  y  z {5|}~{T ]        rs7tuu vvv+$TUVWXYr ws(xycw8Qzt(FFF6     J{9 !"#$%&'()*+,-./0123456789:;<6*  ]|=>?@ABCDEFGHIJK}}}LMN+~ O PQRSTUVWXYZ [ \]\^ _`abcBdefghijk 5l7mnope~qrstcuvwxyz{|}~M \o\QQ\M9* %+{' }    >6T |  ] o\Q '&MD !"#$%&'()++*+,-./0?123456oS789:;<=>?@AjBCDEFG;H IJKLMN\ O#&PQRSTUVWXYZ[\]\^ _ `67abcdef('jgh#-ijkl^mjdn opqrstuv^mw\xyz{|}~     ^ d o ^'B&jg\1 jg^"Bj \Bj^^7j 6T6Q\1       k0  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNO>P4QRSTUVWXYZ[\]^_`abcdefghijkl mnopqrstuvwxyz{|}~&   KL  ]      1f { p     ) 'c6(l      P B(c-R8* P    L7UKLMNOPQR,-   ! "# $ %&'o\5()*+,-./01P\P5*234o5+678"9:;o\ -<+=> 5?@ABCDE"FG;"H\Q -<IJK+ pLMNOP QRSTUQVW K+FXYZ+.+ [\|]^ o&_`+MakH5bPcdefg k&_`7U*hijkl3m+n7oo\8pq F"r -+ stuvwxyz {#y#| }6W~B^Qg\+ 7 h$ (h  ?Sh \$  {+q 6 xp ^pvdg6 - ++B++ +bo\+ +'akpL++b+o\/   +   L   o   o++o\+ +6pL+';IM {ak -   o      j G   z         6         ac toHK\p_c !" #$%&'()*q+ ,-./012 &345678;'B9 M:;<* =b>? -Q@ABCENDB