BLENDER_v241REND SceneSRt`mXSR1-Animation(4NP@ (DATA(4NnTDATATnHR(4NDATAHRn%TTDATA%TnHRDATAnP%TDATAPnDATAnPDATAn(DATA(npDATApn(DATAnpDATAnHDATAHnDATAnHDATAo HRTDATA oh(4N%TDATAho TPDATAohHRDATAo@PDATA@oDATAo@(DATAo(DATAo`DATA`o(4NpDATAo`DATAo8%TDATA8opDATAo8DATAoPHDATAoX(HDATAXoHDATAoXpDATAo0DATA0oxDATAxo0DATAoxPpDATAoHDATAPqx(4Np%TLpRTDATATp(TLink and MaterialsEditing>DATA(TpPTMeshEditingF>DATAPp((TAnim settingsObject>DATA(pPDrawObjectF>DATAp(ConstraintsObject>DATApEffectsObjectDATApHooksObjectF>(DATAp`Particle InteractionObject>DATA`p8SoftbodyObject>DATA8p`OutputRender>DATAp8RenderRenderF>DATApAnimRender>DATApFormatRender>DATApScriptlinksScript>DATAp^R333?>@DhC7`DhCC(BDC?z?DATATR`p333?>/9DATAxqxPPTHRDATAxq(xH(==o?NHRxPDATAxpPTransform PropertiesView3d>DATAPpx3D Viewport propertiesView3d>"DATANYHR333?>????????==o?*A$A?==o??????*AB  B??=C ???Q0>f>-S??DATATHR`N333?>/9DATA(qhx(??PףPoHdR((DATA(pTransform PropertiesIpo!>DATA(]X333?4>?$B}VC1@F6BA #< #<`jFzD OB?$B}VC1@DATAXaP333?4>CC|||??l|DATAP X 333?4>zCCHBC|||?CFC= ADATAx d P 333?4>j =rttDATA c   333?4>?zDzDBCl||ll|zDzD=HB DATA    333?4>BCBCl|llFzD #<HB DATA YHdR 333?4>??? ???? A???PA A!O?j?}GCHB? AB  B? #<CDATATHdR` 333?4>/9DATAhq@(,h@DATAhp@Link and MaterialsEditing>DATA@phMeshEditingF>DATAf333?l?zCB{ µCB,?BFB= ADATA 333?l?zCCHBC$?CFC= ADATA^333?l?#DhC`DpJgChCC(BDC?z?DATAT`333?l?/9DATA@qhpPH} ?=o?@DATA@pTransform PropertiesView3d>DATAp@3D Viewport propertiesView3d>"DATAa333?D?DCDC ??8DATA)pp*(LampLampF>DATAp*pH+)SpotLamp>DATAH+p ,p*Texture and InputLamp>DATA ,p,H+Map ToLamp>H+DATA,p- ,PreviewMaterial>DATA-p.,MaterialMaterialF>DATA.p/-PreviewWorld>DATA/pX0.WorldWorldF>DATAX0p01/Mist Stars PhysicsWorld>DATA01p2X0Texture and InputWorld>DATA2p201Map ToWorld>01DATA2p32OutputRender>DATA3p42RenderRenderF>DATA4ph53AnimRender>DATAh5p@64FormatRender>DATA@6p7h5Link and MaterialsEditing>DATA7p7@6MeshEditingF>DATA7p87Mesh ToolsEditing>DATA8p97Mesh Tools 1Editing>DATA9px:8CameraEditingF>DATAx:pP;9ShadersMaterial>DATAP;p(<x:TextureMaterial>DATA(<p=P;Anim settingsObject>DATA=p=(<DrawObjectF>DATA=p>=ConstraintsObject>DATA>p?=ScriptlinksScript>DATA?p`@>EffectsObject=DATA`@p8A?Map InputMaterial>P;DATA8ApB`@Map ToMaterial>P;DATABpB8AAnimAnim>DATABpCBSoundSound>DATACpDBListenerSoundF>DATADppECSequencerSound>DATApEpHFDArmatureEditingF>DATAHFp GpERampsMaterialF>-DATA GpGHFMirror TranspMaterial>x:DATAGpH GMist / Stars / PhysicsWorld>HDATAHpIGAmb OccWorld>DATAIpJHShadow and SpotLamp>DATAJpXKIHooksObjectF>=DATAXKp0LJParticle InteractionObject>=DATA0LpMXKSoftbodyObject>=DATAMpM0LPreviewTexture>DATAMpNMTextureTextureF>DATANpOMColorsTextureF>MDATAOphPNRadio RenderRadio>DATAhPp@QORadio ToolRadioF>DATA@QpRhPModifiersEditing>DATARpR@QShapesEditing>@QDATARpRCurve and SurfaceEditingF>DATAS^T333?'DhCR_DVuCC(BDC?z?mDATATYWS333?'??? ???? A??@PA Aj?c3>}GCHB? AB  B? #<CDATAWaXT333?'@̌AR|B1@lA A@CC #<@DATATX`W333?'Save AsFONTC:\Creation\BlenderFiles\Pythons\Trajectory\Trajectory_2_41_alpha.blendendDATA8Zq8[' H! TTDATA8[qn8ZH!!!p ==o?===  ]8m}}8\]DATA8\p]Transform PropertiesView3d,>DATA]p8\View PropertiesView3dT>"DATAx]d^ 333?8[j( %I?&DATA^Yxa]333?8[?3?3CZ tW??33?'3CZ?fW ??=Lv_1n;=ꉖ +Fx8?ͦIA4j(ACCZ?eW ??==o??3?3CZ tW?5?5ͦIAB  B??=CCZdW= 7?X<L?#`Y?Nϟ>!?C?n6?@ <@?DATA(xa]b^333?8[zC̽̌?zC@ #< #<`jFzD OBzC̽̌?DATAbadxa333?8[79AffzAo6fB5B2l A@CC #<@lc(dDATA,c(dSCff (DATA,(dcOBBDATAdXeb 333?8[zCCHBCD?CFC= ADATAXe_0fd333?8[zCA'.Yf"C @DD A@FB= A DATA0fbgXe333?8[CC??D?DATAgcg0f 333?8[?zDzDBC D  DzDzD=HB DATAghg 333?8[?zDzDt{BAC D  DFzD #<HB DATA he ig333?8[DATA i^(jh333?8[DdC8CnD fCC(BDC?z?DATA(jg8m i 333?8[ F&(&' C:\Documents and Settings\Rgis\Mes documents\Mes images\cripts\pydata\C:\Documents and Settings\Rgis\Mes documents\Mes images\eDATAT8m`(j333?8[SAVE TEXT FILEIN PATHC:\Creation\BlenderFiles\Pythons\Trajectory\.\2Curve_1.02.blend\Text\-2.40-alpha2-windows\Trajectory_2_41_alpha.pynddVertex_3.blend  DATAnq@{8[( ! "H!?q^@ JL;;; <Hry``opqDATAoppTransform PropertiesView3d<>"<DATApppqoView PropertiesView3dT>"DATApqppTransform PropertiesIpo4>" DATAHrY0u333?nx? 0.x(,>tq>hL? #8?P?nLA.X@\-?x?tq>3# 0.hL?>?v(,> P?.A#S C??[:,x(, >1@G ? ?%C3Wv@PP2_A;A-C\-CGc?f\>f6 nH1k>5*>4Cd/BG]B/DZ @?q^@ JLx? 0.x(,>tq>hL? #8?P?nLA.X@\-?Yr>"a==-CB  B??~Q;=C=A@?7?X<????@,Ap@?DATA(0u]vHr333?nAA L@rAA@6=BfA #< #<`jFzD TEOBA?AA L@rADATA vev0u333?nDATAvawv333?nAffzAK_tK_tB33 33 B22 A@CC #<@2DATAwxv 333?n?zDzDBD22FzD #<HB DATAx^yw333?nDdC8CnD fCC(BDC?z?DATATy`x333?n Save FileryRT PATHSC:\Creation\BlenderFiles\Pythons\Trajectory\ajectory2.blend\Text\ext\Trajectory_Vertex_2.blendd.py DATA@{qn! ! "L>b>o?;;; <}@|}DATA@|p}Transform PropertiesView3d8>"'ZDATA}p@|View PropertiesView3dT>"DATA}Y؀333?@{t?/,Bs>aV>?bZL;:<(,??U?Cs>]ZL ??+G?KA?C>mꋽHy2n=@Z>AQ;:>В߻4I<?@ѿ?6=ԾX?x@^Cn@GCFL ?+G?KA?L>b>o?t?/,Bs>aV>?bZL;Æ=2>@B  B??F<=C嗿+GK7?X<???g@ͥ AI@?DATAx؀d} 333?@{j ]8@DATA(]؂؀333?@{?$BIfA—BvMK"fA #< #<`jFzD 0ROB?$BIfADATA؂ap333?@{0AffzABp p B2X A@CC #<@XЃDATA,Ѓ0SCff (DATA,0ЃOBBDATA,0OB@EDATA,POB@R IDATA,POBRHLDATA,POB@pODATA,pOB@RRDATA,pІME|AZDATA,І0pME@|A]DATA,0ІME|A@aDATA,0IP@ffA0DATA,PIPffA`FDATA,PIPffATDATA,PIPA`DATA,MA@AXDATA pe؂333?@{DATAp 333?@{?zDzDBD22FzD #<HB DATA^333?@{DdC8CnD fCC(BDC?z?DATAT`333?@{Save FileryRT PATHSC:\Creation\BlenderFiles\Pythons\Trajectory\2.40-alpha2-windows\blender-2.40-alpha2-windows\Trajectory_Vertex_3.blend.pySRt0mXSR3-Materialodel Sing؍ȑ@8 (DATA؍n DATA nh؍DATAhn DATAnhDATAn@8DATA@n8DATAnЏ@DATAЏnDATAn`Џ@8DATA`n@DATAn`DATAn8@DATA8nDATAn8DATAȑo hDATAoXȑ؍DATAXo؍DATAoX@DATAo0@DATA0ox DATAxo0hЏDATAoxЏDATAoP@ЏDATAPoDATAoP@DATAo(Џ`DATA(op`DATApo(DATAopDATAoH`DATAHoDATAoؖHDATAؖo 8DATA ohؖ8DATAho DATAoh`DATAo8DATA@q؍@?@Pף77 @țDATA@pOutputRender>DATAp@RenderRenderF>DATApțAnimRender>DATAțpFormatRender>DATAfh333?~CA~CA?AFA= ADATAh8 333?zCCHBC ?CFC= ADATA8^@h333?DhC?DhCC(BDC?z?mDATA@Y(8333???? ???? A??@PA Aj?c3>}GCHB? AB  B? #<CDATA(a @333?@̌AR|B1@lA A@CC #<@DATAT `(333?/9DATAq@ hЏDATAq`Џ@G@? JLA9A9SAT{~ȰDATApOutputRender>DATApXRenderRender>DATAXp0AnimRender0>DATA0pXFormatRenderH>DATAp0PreviewMaterial>DATApMaterialMaterial>DATApShadersMaterial0>DATAphTextureMaterialD>DATAhp@Map InputMaterial\>DATA@phMap ToMaterial`>DATAp@RampsMaterial>DATApMirror TranspMaterialH>DATAȰ^б333?'ChCC+lh.CC(BDC?z?{DATAбYȰ333?'J>H!?)xu?i6>Pbܗ=(?^L?a?滎z?J>#xu?ܗ=Hi6>(? ?Pb^L?\FAA?4[?[!?@jG>gb>Pb>4Im>k&?]M^L<0@AzA=>Kc<2֍7&> ?:x¸A1vB,jB~@G@? JLJ>H!?)xu?i6>Pbܗ=(?^L?a?滎z?@?$$OAB   B?=Ch?j(4?t'>dDATA(]б333?'zC AzC A #< #<`jFzD OBDATAT`333?';SAVE FILE/usr/home/intrr/blender/blend/untitled.blendDATAqhU.=k=o??9?9S?T@@DATAY333?9???h?j(4?t'>????hj(4t'?U.=k=o< =F?OAAgj(4t'?U.=k=o????h?j(4?t'>??OAB   B??=Ch?j(4?t'>d????DATA^333?9DdC>9C,DeCC(BDC?z?DATA(]333?9zC AzC A #< #<`jFzD OBDATAT`333?9 SAVE FILE/Users/ton/Desktop/der/blend/untitled.blendDATAhq88`e??AHM???:ShDATAhYP333?\@ݕ/?V~'?3F:?>T8175e?4>Z& 4?ߕ/?7F:?81X~>75e?'?T3>ne@>N@?4z?{''巄???T?y|? l4A.11A 4A*p>?Ĵkz3ڴ0>+>,4xB ֟&BĭeA(@e??AHMݕ/?V~'?3F:?>T8175e?4>Z& 4?H?N+Z#OAB   B??=Ch?j(4?t'>d????DATAP^Xh333?\@DdC>9C,DeCC(BDC?z?DATA(X]P333?\@zC AzC A #< #<`jFzD OBDATAT`X333?\@ SAVE FILE/Users/ton/Desktop/der/blend/untitled.blendDATA8qh8&==o?:S8DATA8Y 333?G?3?3:-vl(4??3?3;@k(40v@?&=nn1n;=ꉖø;FWȾP{:?IXA54 AC:@k(4.v@?&==o??3?3:-vl(4?5?5IXAB   B??=C:j(4?.vd????DATA ^(8333?GDdC>9C,DeCC(BDC?z?DATA((] 333?GzC AzC A #< #<`jFzD OBDATAT`(333?G SAVE FILE/Users/ton/Desktop/der/blend/untitled.blendSRtm0SR4-SequenceX@ (DATAnDATAn@DATA@nDATAn@DATAnDATAn`DATA`nDATAn`DATAn8DATA8nDATAn8dDATAndDATAnXDATAXnDATAo@DATAo0DATA0oxDATAxo0DATAoxDATAoP`DATAPo@DATAoP`DATAo(`DATA(op8DATApo(8DATAopDATAoH8DATAHo`DATAoHDATAo DATA ohDATAho DATAoh8XDATAo@XDATA@oXDATAqxDATAp`OutputRender>DATA`p8RenderRenderF>DATA8p`AnimRender>DATAp8FormatRender>DATA^333?\YDhCGIDhCC(BDC?z?DATAT`333?\Y/9DATAxqx`@DATAxqxX8=i>o?xDATAxf@333?La~CB~CB?BFB= ADATA@_x333?LazCAzCA  A@FB= A DATAY@333?La????????8=i>o?fffAD&@??fffAB  B? #<CDATAT`333?LaAVE TARGA/t1.blend9DATAqx88=H>o?eee HDATA_`333? hzCAzCA1||1 A@FB= A DATA`YH333? h????????8=H>o?fffA*@??fffAB  B? #<CDATATH``333? hAVE TARGA/t1.blend9DATAq`8=>o?cccdDATA(](333?nB̽̌?B̽̌?## #< #<`jFzD SQB̽̌?DATA(Y333?n????????8=>o?fffA@??fffAB  B? #<CDATAT`(333?nOAD FILE/9DATAq8X8=i>o?XDATA_p333?DtzCAzCA A@FB= A DATApYX333?Dt????????8=i>o?fffAD&@??fffAB  B? #<CDATATX`p333?DtAVE TARGA/t1.blend9SRtmSR5-ScriptingXH (DATAnDATAnDATAn`DATA`nDATAn`DATAn8DATA8nDATAn8DATAnDATAnDATAXoDATAoXDATAo08DATA0ox8DATAxo0DATAoxDATAoP8DATAPoDATAoPDATAo(DATA(opDATApo(`DATAopDATAoHDATAHo`8DATAq8DATAq 'S==o?@( hDATAphTransform PropertiesView3d>DATAhp3D Viewport propertiesView3d>"DATA@Y( 333?????????'S==o?QcA*A?'S==o??????*AB  B??=C ????DATAT( `@333?/9DATA q8`??Pף X 8  DATA pTransform PropertiesIpo!>DATAx d0 333?j> =DATA0b 333?CCx??|?DATA(]p0333?zC̽̌?zC@;; #< #<`jFzD OBzC̽̌?DATApa333?CC|||??l|hhDATA,hBOp=ABDATAp 333?zCCHBC|||?CFC= ADATAcp 333??zDzDBCl||ll|zDzD=HB DATApP 333?BCBCl|llFzD #<HB DATAPY8p333???? ???? A???PA A!O?j?}GCHB? AB  B? #<CDATAT8`P333?/9DATAq O%&$DATApLink and MaterialsEditing>DATAppMeshEditingF>DATAppHAnim settingsObject>DATAHp pDrawObjectF>DATA pHConstraintsObject>DATAp EffectsObjectDATApHooksObjectF>HDATAp Particle InteractionObject> DATA pX!SoftbodyObject> DATAX!p0" OutputRender>DATA0"p#X!RenderRenderF>DATA#p#0"AnimRender>DATA#p$#FormatRender>DATA$p#ScriptlinksScript>DATA%^&333?\ChC#Dk=@P ]CC(BDC?z?DATAT&`%333?\/9SC (WSCScenetageainBP=NH,(.-g@ͥ AI@g@ͥ AI@g@ͥ AI@ =x..dd??< ddd??Z  @????L?fff??@ A//backbuf/tmp\//ftype@&#@^@&^#DTxTVDATAH,O,.UDATA,O,H,.a IDATA,O8-,.EDATA8-O-,.eHLDATA-O-8-.lRDATA-O(.-ZBDATA(.O-.[pODATA(x.N,d'=A@DATA.VZ ?o: DATATZDATAxTCAt /CACameraamera.001L>=B B@?LA/LALamp?????A4B>??? B4B?@@???IPP0`FIPObIpox15S%2N:B;07AOBDATATx1,2@6~Z@B=OBDATAT2,2x17~Z@B=OBDATAT2,329~Z@B=OB DATAT3,32h;~Z@Bu>T|?OB u>DATAT3, 43 =~Z@Bu>T|?OBu>DATAT 4,43>~Z@Bu>T|?OBu>DATAT4,05 4@?$Bl AOBW@DATAT05,54B?$BUQ`AOB;@DATAT5,05pD?$B0@OBS@DATA@6%~Z@ɓ@@t Ah4A'KA`AQAA,ABOAҸAAqAw B)BNBBBBDATA7%~Z@ɓ@@t Ah4A'KA`AQAA,ABOAҸAAqAw B)BNBBBBDATA9%~Z@ɓ@@t Ah4A'KA`AQAA,ABOAҸAAqAw B)BNBBBBDATAh;%u>~Z@u>ɓ@u>@u>t Au>h4Au>'KAu>`Au>QAu>Au>,Au>BOAu>ҸAu>Au>qAu>w Bu>)Bu>NBu>Bu>Bu>Bu>DATA =%u>~Z@u>ɓ@u>@u>t Au>h4Au>'KAu>`Au>QAu>Au>,Au>BOAu>ҸAu>Au>qAu>w Bu>)Bu>NBu>Bu>Bu>Bu>DATA>%u>~Z@u>ɓ@u>@u>t Au>h4Au>'KAu>`Au>QAu>Au>,Au>BOAu>ҸAu>Au>qAu>w Bu>)Bu>NBu>Bu>Bu>Bu>DATA@%3@?@n@@q@2@@7A"@ AeArA0Ad@)lA@qA3m@A@a AY@CA@Ag@jAsO@wsBW?B591X Bm}B*~B=B6ZB$BG5*BDATAB%8~U?U@U$?@`t@P<@#Xx?N`A~@0Aˎ?@lA%@xњAb@A<>@`A#@AC@Aͥ AA3ABmABJVA]@ B#AB}LAB0^UArB,`AUB=[PA$B=[PA1*B=[PADATApD%4Js?p(@@I@]-B@A9=0A"P>.pA&>s˚AjA6?]&A%?BA_;@AI@0Ar@ #BEm@Ba@! B[@{Ba|@Ba@UB:@? Bj=$Bj=(Bj=IPP`FT0IPObIpo.001F KsGۃB š1+BOBDATATF,hGxBU?,BIF?AvܿA0B,BzHBDATAK%sL@?L@ )@L@@4@@j@\%@RAjAGA0AoAXrAӖ*ANA'AAAIA0 AdB@,B@oHB@DATAL% sc@?c@(@c@@c@@c@C@c@@Ac@0Ac@uAc@ƶAc@Ac@UAc@cBc@,Bc@.IBc@DATA8N% sa}=?a}=(@a}=@c}=@c}=C@c}=@Ac}=0Ac}=uAc}=ƶAc}=Ac}=UAc}=cBc}=,Bc}=.IBc}=DATAO% j@? j@*@ j@ @Z@@ A%?@G:A|A__@A0AeRAfA>A:"A6=AAIAAABX[%B,BX[%BABX[%BDATAP% s???(@?@?@?C@?@A?0A?uA?ƶA?A?UA?cB?,B?.IB?DATAR% s???(@?@?@?C@?@A?0A?uA?ƶA?A?UA?cB?,B?.IB?DATAXS% s???(@?@?@?C@?@A?0A?uA?ƶA?A?UA?cB?,B?.IB?IPPT``FIPObIpo.002 U`YA@6=BfAOBDATAT U,UYAAި@rAOB#ި@DATATU,0V UZAA=OBDATAT0V,VU[AA=OBDATATV,@W0Vp\AA hr>OB 2>DATAT@W,WVH]AA?m@OB m@DATATW,PX@W]AA?Y'?OBY'?DATATPX,XW^AA?X'?OBX'?DATATX,`YPX(_AA L@>JAOB2;VADATAT`Y,X`AA5AOAOBXADATAY%@rAArA=ArAAlAAJA9A}AAި@Aި@Aި@DATAZ%~@ACDA{AAJA-AAADATA[%~@ACDA{AAJA-AAADATAp\%@ hA h1CA h{A [A2>(AB>ͮA2>A2>A2>DATApH]%Σ@?A?;DA?{Am@Am@W Am@DATAp]%(@?A?R;DA?{AY'?AY'?5AY'?DATAp^%(@?A?R;DA?{AX'?AX'?5AX'?DATA(_%@ L@A L@%A L@VgA>JAA>JAgA>JA.gA2;VAA2;VAq1A2;VADATA`%b@5AA5AN=A5ÄzAOAAOAAOADAXAAXA/AXAIPP`TIPObIpo.004XadW.MiB!/@OBDATATXa,ad?AnϠ@OB!ɥDATATa,hbXae?A'5Y:@OB=DATAThb,baf?A3AW 5OBS8DATATb,xchbg?A=OBDATATxc,dbh?A=OBDATATd,xci?AyOB ů̿DATAd%ǝ8o@?o@@o@A@@#@0A4@gbA&@QA2Aƒ bAu[AnϠAnϠl BnϠDATAe%tk??tk?>@tk?D@O0ATeAjZHAM<A@ ?C>Ay_@AſAſ BſDATAf%9f;?f;ߤ@f;u:@f;0A&5CdAAލAUA !A6U9@A8A8Н B8DATAg%9?@y@0ACdA@ލAA!A@AAН BDATAh%9?@y@0ACdA@ލAA!A@AAН BDATAi%,?s@ߨ@)0A3dA&A0=AAy2AA BWO P=NMWOWorldg=pb>>===??A@pA A?L=TXdjZTXTrajectory_2_41.pyk(k8 uuXX)DATAHkC:\Creation\BlenderFiles\Pythons\Trajectory\Trajectory_2_41_alpha.pyDATAk@lS8E DATA@llk8RDATAll@l `WVCFREEDATAlml (XDATAm`mlS0 //ftDATA`mmm@ VDATAmm`m @GS(DATAm8nmTDATA8nnmH5NHDATAnn8n VFREEDATAnon8 VFREEDATAoXon NDATAXooo DATAooXoH0DATAo0po0!NDATA0pxpo 8V?DATAxpp0p8 v DATApqxpp .orgDATAqPqp XV DATAPqqq R1FREEDATAqqPqHwDATAq(rq.8DATA(rprq(k DATAprr(r(PFREEDATArsprx`'MqqDATAsHsrHR4t DATAHsss`r(pDATAssHsO- DATAs ts e@?NDATA thtsXV;FREEDATAhtt t< iDATAttht8@qQDATAt@ut0TTDATA@uutؐW BGL,DATAuu@u8x7M DATAuvuH@?NDATAv`vu0FREEDATA`vvv(|llllDATAvv`v`V:qqDATAv8wv|DATA8wwvP4LDATAww8wPH-%DATAwxwXV DATAxXxwx(8>VDATAXxxx@`|{ DATAxxXxx}V?FREEDATAx0yx@=DATA0yxyxX(_@llllDATAxyy0ypV8 DATAyzxy@ V DATAzPzyx`AtDATAPzzzk@DATAzzPzht> DATAz({z X. DATA({p{z8x{obj,DATAp{{({plVCDATA{|p{pTI DATA|H|{h`$Ae DATAH|||S DATA||H|#qqqqDATA| }|p5L| DATA }h}|?S! DATAh}} }H6NX DATA}}h}y! DATA}@~}S!pDATA@~~}HVpDATA~~@~VzDATA~~`V>DATA`~M DATA``(?N$ DATA`P!ADATA8 `!DATA8h xDATAȀ8 x DATAȀ!RDATAXȀH! DATAX!'?DATAX!! ?DATA0P"@{DATA0x"RDATAx0"S?DATAx"-T?DATAP8#DATAPp#ЎFREEDATAP#@ llllDATA($@*DATA(p8$`0=fraDATAp(p$OT .DATAp$xM DATAH%S DATAH@%pDATA؅H%xR$FREEDATA؅ %S DATA h؅(& DATAh p&h DATAh&0TF\YDATA@('@P DATA@h'VVDATAЇ@'S"DATAЇ(ЫFREEDATA`ЇP(Vew DATA`(PS"ImagDATA`(ШmateDATA88)pTDATA8p)HmateDATAȉ8)VDATAȉ)(@ )DATAXȉ8*HmateDATAXp*pR;DATAX*@VqCDATA0(+811TDATA0xx+R DATAx0+buttDATAx,@ DDATAP@,qqqqDATAP,8R)DATAP,VFREEDATA(0-1 p://DATA(pp-X}r"]DATAp(-TDATAp-VDATAH8.U DATAH.آ28-JDATA؎H.pUK--- DATA؎ `/;NFREEDATA h؎/p*aluaDATAh /.selDATAhH0О#FREEDATA@08rlDATA@@1p!N DATAА@1]TDATAА17N $DATA`А1( DATA`P2hVFREEDATA`2o,DATA8838#-DATA8p3p#DATAȒ83 VFREEDATAȒ30--- DATAXȒ(4# llDATAX`4pLS DATAX4#)haDATA05V@\DATA0xH5USrameDATAx0(6@$i DATAx6Q1qqqqDATAP07xQ/DATAP7`n=DATAP8$(DATA(88V DATA(p8nAerinDATAp(8HoDATAp09HVl llDATAHx9V DATAH9 bbDATAؗH9FREEDATAؗ 8:;NllllDATA hؗx:VDATAh :o DATAh;oDATA@8;pVDATA@;o( DATAЙ@;Xp@DATAЙ<(VFREEDATA`Й`<НDÕDATA`<pqqq5DATA`<p*DATA8H=0ql####DATA8=($DATAț88>%X.beDATAț>VDATAXț>CDATAXP?@p:DATAX?VDATA0?%DATA0x@@FREEDATAx0x@ llllDATAx@PVbbbqDATAP@0llllDATAPHADATAPA DATA(AVDATA(p0BX DATAp(hB####DATApB`3DATAHBFREEDATAH@CȘ>DATADATAؠHC8>DATAؠ  Dink(DATA hؠXDЋ?DATAh DDATAhDХVDATA@(E(IbDATA@EpDATAТ@FVDATAТXF0DATA`ТF exFrDATA`FX`DATA`G)DATA8xGQ0a.blDATA8GDATAȤ8(HWDATAȤ`H(*qqqqDATAXȤH*=parDATAX IDÕDATAX`I(*DÕDATA0IDÕDATA0xI?@ DATAx0hJV! DATAxJpVJ)EEDATAP@K8аDATAPxKVDATAPK[1]-DATA(LHV+nd(rDATA(ppL}DATAp(LV+nd(rDATApMXz"+stDATAH`MV+X DATAHMz]+4:DATAةHNhV&e foDATAة `NwDATA hةNV&DATAh OtqqqqDATAhHO(V& DATA@O8sqqqqDATA@OV&FREEDATAЫ@@PqDATAЫPV&DATA`ЫPoFREEDATA`8QHV'06-MDATA`QnDATA8QVDATA8RVDATAȭ8PRVQFREEDATAȭRVhDATAXȭxS@VgDATAXT@VllllDATAXPT$zDATA0TVDATA0xTPFREEDATAx0 U####DATAxXU DATAPU'@DATAPU` DATAP0V%DATA(V  DATA(pV8DATAp(WVDATApHW0mDATAHWp5DATAHX DATAزH8X staDATAز xXX DATA hزX DATAh XP3DATAh`Y DATA@YFREEDATA@YX(DATAд@8Z()DATAдZ(DATA`дZx(DATA`X[ oLocDATA`[hVDATA8[ VDATA8(\أVFREEDATAȶ8p\VFREEDATAȶ\+DATAXȶ]x (DATAXX]####DATAX]@P4DATA0]HlW3D)DATA0xH^HV ete DATAx0^ indeDATAx^ $DATAP_?DATAP@_@'DATAP_RVDATA((`O/FREEDATA(p`DDATAp(aj0DATApHapO3?DATAHa 'DATAHbj?DATAػHPbde lDATAػ bDATA hػb4hutiDATAh (ch4 DATAhc4 DATA@cH4FREEDATA@`d4[0]+DATAн@d(4DATAн0e6MOUSDATA`нe6Nom=DATA`fx6DATA`hf DATA8fjcY,iDATA8fiDATAȿ8Hggll lDATAȿghgDATAXȿge@ RDATAX8hPdllPaDATAXh(pDATA0hHDATA0x(i(UViewDATAx0xi.SDATAx`jTDATAPjVDATAPjUDATAP0kUDATA(hkDATA(pkUqqqqDATAp(kO2DÕDATApXlV @DATAHlPU qqqqDATAHlU DATAHmUFREEDATA PmU.oldDATA hm@UCneeDATAh nU'a byDATAhXnpV er.DDATA@nUDATA@nPU"DATA@(o8DATApoU"DATA`oDATA`pU"DATA`hpXDATA8pXU?DATA8 q(VDATA8`qUipo_DATAqU$DATAXq`U% ?DATAXHrU#DATAXrN.8WDATA0sU%DATA0xXsVDATAx0sxU%DATAxsU#llllDATAPPt8N.8DATAPt0U%8VDATAPuVDATA(PuX% DATA(puX#@DATAp(vM.bb qDATAp`v`X%@DATAHvPVDATAHwXfromDATAH8wX* *EDATA wVDATA hwXXDATAh xX#pDATAhpxX4DATA@xhM.DATA@8y`X DATA@yV DATAyXtwo DATA`zX#DÕDATA`XzPX4DATA`zM.qqqqDATA8 {XllllDATA8p{xV DATA8{XDATA{XX# DATAX@|X4nderDATAX|L.DATAX} X=RIGDATA0X}0V DATA0x}DATAx0}P DATAx0~xXDATAP~ЫXctDATAP~DATAP0L-DÕDATA(x(X DATA(p`XDATAp(Xor iDATAp(ЬX DATAH`K/DATAHX&"@DATAHXDATA P@X!?DATA hH?DATAh X! DATAhHDATA@X! DATA@ DATA@0`K. DATADATA`؃HX'  DATA`0V DATA`xV DATA8 DATA8  DATA8P8DATAX0DATAXЅXpDATAXXV QDATAXHVpDATA0DATA0x؆X$33 BDATAx00xXDATAxhXDATAPX,CDATAPHXDATAP84NDATA(XDATA(pЈkVDATAp(8m DATAphXDATAHX%#fDATAHpX DATAH0PllllDATA(@DATA(pЊXKqqqqDATAp(P(X&yQuaDATApXqqqqDATAHX DATAH X#DATAHxkVVDATA 0rameDATA h8kVFREEDATAh PjV $DATAh8 DATA@؍XX0DATA@(XtrixDATA@xjVur.pDATAXFREEDATA``jV@DATA`X`XqqqqDATA`jVqqqqDATA8WDATA8@J+EEDATA8أWPendeDATA(`W ourCDATAXW X DATAXJ.DATAX WDDATA0XiVDATA0x0W DATAx0pWZDATAxiVDATAP`@iVqqqqDATAPW WDATAPW DATA(  W*DATA(pW ADATAp(WDATApW FREEDATAH816-JDATAH8WI DATAHWLry:LDATA 8WBDATA hhVDATAh @HDATAhhVDATA@ЗhhVImagDATA@hDATA@`DATADATA` hVTMOUDATA`HW#qqqqDATA`WDATA8ؙ@W DATA8xtilsDATA8xW(DATAةWO,DATAXp`W)FREEDATAXgVDATAXW!DATA0pXPODATA0xPDATAx0Q$ DATAxhHDATAPFREEDATAPWDATAP0hQUDÕDATA(QFREEDATA(pPR(DATAp(@R\oLocDATAp SheadDATAH xSBDATAHS?DATAHȲllllDATA 8TDATA hXxTDATAh xDATAhDATA@HTDDATA@UDecMDATA@@U DATAgVDATA`@HgV8+DATA`gVDATA`8DATA8 U ?DATA8`fVDATA8Uq bbDATApfVGet(DATAX U![0],DATAXxPVDATAXV FREEDATA0 DATA0xhd DATAx0W6qqqqDATAx(fVllllDATAP`eV llllDATAPeV?DATAPpW)0DATA(HW DATA(pFB"@DATAp( F)DATAp` F)DATAH PGDATAH PeVDATAHP G"333?DATA  H-DATA h eVDATAh P pDATAh dV DATA@ РDATA@ `H'DATA@p X DATA H5?DATA` 0IDATA`h I&DATA` ȔDATA8I4DATA8pXJDATA8J1*DATA( KDATAX``KDATAXKDATAXhX(J+DATA0ȭXI+ DATA0xK%DATAx0(X(ҸADATAxpX8LqqqqDATAPXL%DATAPXLDATAPhX+pDATA(ȯXHMDATA(pXMDATAp(8XM DATApxXDATAHȰXN DATAHX@DATAHXXDATA XDATA hȱXb qqDATAh X0DATAh8X0dVDATA@X8DATA@вXhpDATA@ XcVnDATAhXPDATA`X?DATA`XDATA`8XcV?DATA8 XDATA8 дXXUDATAS#!BPYctDATA8R DATAD """ Registration info for Blender menus: <- these words are ignoredDATA Name: 'Trajectory'DATASBlender: 240REEDATA@ Group: 'Animation'DATA, Tip: 'See Trajectory of selected object'DATAT"""DATAH5NDATA __author__ = '3R - R3gis'e%DATA8 __version__ = '2.41'276DATA __url__ = ["Script's site , http://blenderfrance.free.fr/python/Trajectory_en.htm","Author's site , http://cybercreator.free.fr", "French Blender support forum, http://www.zoo-logique.org/3D.Blender/newsportal/thread.php?group=3D.Blender"]DATA __email__=["3R, r3gis@free.fr"]DATAH DATA0!NiewDATA __bpydoc__ = """?DATA8 ll DATAp Usage:DATA lllDATA4 * Launch with alt+P (or put it in .script folder)DATAH-RDATA<Allow to see in real time trajectory of selected object.namDATAfDATA(On first run, it ask you:DATAPx- If you want that actually selected object have they trajectory always shownDATA8- Futur and Past : it is the frame in past and futurREEDATA,`of the beggining and the end of the path8DATA0- Width of line that represent the trajectoryDATA ~DATA<XThen the object's trajectory will be shown in all 3D areas.DATA@When trajectory is red, you can modifiy it by moving object.REEDATAT8When trajectory is blue and you want to be able to modify it, inser a Key (I-Key)x4DATAEEDATA Notes:
DATAP8It create one script link so make sure that 'Enable Script Link' toogle is oneDATAbjnDATAFDATA("""DATA`qDATA5DATAP# --------------------------------------------------------------------------REEDATA(P# ***** BEGIN GPL LICENSE BLOCK *****EEDATA#DATA,# Copyright (C) 2004-2006: Regis MontoyaDATA@#EEDATA@x# This program is free software; you can redistribute it and/orDATA@# modify it under the terms of the GNU General Public LicenseDATADX# as published by the Free Software Foundation; either version 2DATA<# of the License, or (at your option) any later version. #DATA@#DATADx# This program is distributed in the hope that it will be useful,DATAD# but WITHOUT ANY WARRANTY; without even the implied warranty ofDATA@h# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See theDATA0# GNU General Public License for more details.DATA8#DATADp# You should have received a copy of the GNU General Public LicenseDATAL# along with this program; if not, write to the Free Software Foundation,DATADh# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.DATA#EEDATA$# ***** END GPL LICENCE BLOCK *****DATAPp# --------------------------------------------------------------------------EEDATA$#################################DATA H# Script pour convertir un #DATA$# mouvement en trajectoire #DATA$#################################DATAH# by 3R - 26/08/05DATA# pour tout probleme :DATA# r3gis@free.frDATA# ou sur le newsgroup:DATA(`# http://zoo-logique.org/3D.Blender/DATA$#################################EEDATA$ #-----------Utilisation---------#EEDATAh # #EDATA #Lancer avec Alt+P #nDATA!# #DATA$H!#Derive du script MovToPath : #DATA(!#http://cybercreator2.free.fr/Pythons/#DATA$!#################################DATAP"DATA"DATA"@DATA"import BlenderEDATA8#DATAp#DATA$#scene=Blender.Scene.GetCurrent()lEDATA$ DATA8$ EEDATA p$#EcritureDATA$def ecrire(name,script):1%DATA% global sceneEEDATA@% lestext=Blender.Text.Get()DATA(% Ntext=[txt.name for txt in lestext]DATA % ecrire=0EEDATA(& if name not in Ntext:DATA p& ecrire=1DATAH& elif lestext[Ntext.index(name)].asLines()[1] != "#"+str(__version__):CDATA (' ecrire=2lDATAh' if ecrire==1:EDATA$' scripting=Blender.Text.New(name)DATA( scripting.write(script)DATAP( if ecrire==2:EDATA$( scripting=Blender.Text.Get(name)DATA( scripting.write(script)DATA8)DATA p)#Lier DATA)def lier(name,type):?DATA) global sceneEEDATA8* try:DATA<p* leslies=[script for script in scene.getScriptLinks(type)]DATA* except:leslies=[]iDATA(+ if name not in leslies:ImDATA$x+ scene.addScriptLink(name,type)HDATA+x14DATA,DATA@,#Suppression d'un texteDATA,,# Delier : scene.clearScriptLinks([name])DATA,def supprtexte(name):itDATA0- global sceneEEDATAp- try: DATA - Texte=Blender.Text.Get(name)DATA- Texte.clear()DATA$8. scene.clearScriptLinks([name])REEDATA . Blender.Text.unlink(Texte)DATAL. except:print('---Initialisation of Trajectory_'+str(__version__)+'.py---')DATA`/lenDATA,/#On regarde si le script est deja en routeDATA/lestext=Blender.Text.Get()lDATA$H0Ntext=[txt.name for txt in lestext]DATAp0if ('Trajectory' not in Ntext) or (lestext[Ntext.index('Trajectory')].asLines()[1] != "#"+str(__version__)):REEDATA@1 ask_modif=0REEDATA1else:EEDATA1 ask_modif=1REEDATA$1#Si oui on demande ce qu'on fait$DATAP2if ask_modif==1:DATAp2 ask_modif=Blender.Draw.PupMenu("Script already launch %t|Modify settings%x0|Keep settings%x1|Stop script%x2|")DATA83 DATAp3 DATA3selection_mode=0_2.DATA3futur=0DATA(4past=0DATA `4epaisseur=1DATA,4#Dans le cas de la modification du scriptDATA5if ask_modif==0:rs(DATAH5 handle_mode=Blender.Draw.PupMenu("Mode for linking? %t|Redraw (actived for each 3D View)%x1|Space Handler(you have to activate for each area by View>>SpaceHandler)%x2|")DATAl(6 selection_mode=Blender.Draw.PupMenu("Always show path for currently selected objects? %t|Yes%x1|No%x2|")DATA46 futur=Blender.Draw.PupIntInput('Futur',35,1,900)DATA007 past=Blender.Draw.PupIntInput('Past',20,1,900)DATA@7 epaisseur=Blender.Draw.PupIntInput('Trajectory width',2,1,7)EEDATA8DATA88if selection_mode==1:ueDATAD8 objets_select=[obj.name for obj in Blender.Object.GetSelected()]deDATA8else:DATA09 objets_select=[]DATAx9if futur==None:DATA 9 futur=35DATA9if past==None:EDATA 8: past=20DATAx:if epaisseur==None:DATA: epaisseur=2REEDATA;try:DATA8; if handle_mode==2:DATA,; DrawPart="#SPACEHANDLER.VIEW3D.DRAW\n"DATA; else:DATA< DrawPart="#!BPY\n"qqqDATA `<except:DrawPart="#BadlyMade"RDATA<REEDATA,<DrawPart=DrawPart+"#"+str(__version__)+"""DATApH=#This script is a part of Trajectory.py and have to be linked to the scene in Redraw if not in HANDLER mode.DATA =#Author : 3R - Regis MontoyaEDATA(8>#It's better to use the Trajectory.pybjDATA>#To find help : REEDATAD>#You can modify the two following value to change the path settingsDATAP?futur="""+str(futur)+""" BDATA?past="""+str(past)+"""ADATA(?objets_nom="""+str(objets_select)+"""DATA@@###DATAx@REEDATA@import Blender,mathDATA @from Blender import BGL,DrawÕDATAHAfrom Blender.BGL import *DATAAfrom Blender.Draw import *DATAAfrom math import *DATA0BlllDATAhBDATAB#Prise de la frame actuelleDATA BframeC=Blender.Get('curframe'):DATA@@CrenderingCont=Blender.Scene.getCurrent().getRenderingContext()DATA@Ck=1.00*renderingCont.oldMapValue()/renderingCont.newMapValue()EDATA Dif k<1:DATAXD tr=-1*int(log(k*0.1,10))DATADelse:DATAD tr=-1*int(log(k,10)) DATAd(E#Creation de la frame de comparaison, reelle et entiere (pour test rouge, place ipo, trace courbe)DATAEframeCtr=round(frameC*k,tr)DATAFframeCr=frameC*kDATA XFframeC=int(round(frameC*k,0))DATAFREEDATAFaveDATA,G#Listage des objets demandes dans $objetsDATA4xGobjets=[o for o in Blender.Object.GetSelected()]DATAGfor objn in objets_nom:DATA(H try:DATA,`H if objn not in [o.name for o in objets]:DATA,H objets.append(Blender.Object.Get(objn))DATA I except:DATA,`I print "Warning : "+str(objn)+"not found"DATAIREEDATA@I#Fonction de retour de la matrice des parent a une frame donneeDATA$hJdef matrixForTraj(frame,PARENTS):EEDATALJ DecMatC=Blender.Mathutils.Matrix([1,0,0,0],[0,1,0,0],[0,0,1,0],[0,0,0,1])EDATA@K trDATA xK for i in range(len(PARENTS)):DATAK parent=PARENTS[i][0]DATA,L try:X=PARENTS[i][5].evaluate(frame)*pi/18DATApL except:X=parent.RotXDATA,L try:Y=PARENTS[i][6].evaluate(frame)*pi/18DATAM except:Y=parent.RotYDATA,`M try:Z=PARENTS[i][7].evaluate(frame)*pi/18DATAM except:Z=parent.RotZDATA(N try:LX=PARENTS[i][2].evaluate(frame)fDATA`N except:LX=parent.LocXDATA(N try:LY=PARENTS[i][3].evaluate(frame)DATAO except:LY=parent.LocYDATA(HO try:LZ=PARENTS[i][4].evaluate(frame)DATAO except:LZ=parent.LocZDATA(O try:SX=PARENTS[i][8].evaluate(frame)pDATA@P except:SX=parent.SizeXߊADATA(P try:SY=PARENTS[i][9].evaluate(frame)DATAP except:SY=parent.SizeYndDATA(8Q try:SZ=PARENTS[i][10].evaluate(frame)DATAQ except:SZ=parent.SizeZREEDATAQ DATARCDATATPR NMat=Blender.Mathutils.Matrix([cos(Y)*cos(Z)*SX,SX*cos(Y)*sin(Z),-SX*sin(Y),0],SDATAlR [(-cos(X)*sin(Z)+sin(Y)*sin(X)*cos(Z))*SY,(sin(X)*sin(Y)*sin(Z)+cos(X)*cos(Z))*SY,sin(X)*cos(Y)*SY,0],nADATAhxS [(cos(X)*sin(Y)*cos(Z)+sin(X)*sin(Z))*SZ,(cos(X)*sin(Y)*sin(Z)-sin(X)*cos(Z))*SZ,SZ*cos(X)*cos(Y),0],DATAT [LX,LY,LZ,1])DATA(PT DecMatC=DecMatC*PARENTS[i][1]*NMat<1:DATAT return DecMatCDATAToDATA U#####DATA XUTestLIST=[]DATA(Umatview=Blender.Window.GetPerspMatrix()DATA U###########DATA(0V#Fonction de tracage des trajectoiresDATA V###########DATAV DATAWdef Trace_Traj(obj):DATAHW global TestLIST,matviewetDATA8W #On trace la trajectoire pour tout les objets listeEEDATAX DATA 8X LocX=[]EEDATA xX LocY=[]i DATA X LocZ=[]TADATA4X #Liste contenant les points vertex de trajectoireDATA`Y vertexX=[]REEDATAY try:aDATA,Y ipoLocX=obj.getIpo().getCurve('LocX')!DATA,8Z ipoLocY=obj.getIpo().getCurve('LocY')oinDATA,Z ipoLocZ=obj.getIpo().getCurve('LocZ')DATA,Z ipoTime=obj.getIpo().getCurve('Time')DATA X[ except:DATA[ ipoLocX="none"EEDATA[ ipoLocY="none"RoDATA(\ ipoLocZ="none"DATAp\ ipoTime="none"DATA,\ if not(ipoTime==None or ipoTime=="none"):DATA ] return 0DATAX] eDATA8] #Initialisation de la boucle de recuperage parentsREEDATA] parent=obj.getParent()==BDATAH^ saveObj=objEEDATA^ enfant=objREEDATA^ PARENTS=[]REEDATA_ .DATA(@_ #Boucle de get des info des parents :DATAX_ #liste de [nom,matrice initiale au parentage, ipo en X,Y,Z,rotX,rotY,rotZ,sizeX,Y,Z]DATA0(` while type(parent)==Blender.Types.ObjectType:DATAH` Init_Mat=Blender.Mathutils.Matrix(enfant.getMatrix('worldspace'))"DATAa Init_Mat.invert()/ZDATA4Ha Init_Mat=Init_Mat*enfant.getMatrix('localspace')DATA(a Init_Mat=parent.getMatrix()*Init_MatDATAb Init_Mat.invert()RDATAPb poDATAb try:DATA8b ipo_Parent_LocX=parent.getIpo().getCurve('LocX')REEDATA8(c ipo_Parent_LocY=parent.getIpo().getCurve('LocY')REEDATA8c ipo_Parent_LocZ=parent.getIpo().getCurve('LocZ')REEDATA8c ipo_Parent_RotX=parent.getIpo().getCurve('RotX')REEDATA8`d ipo_Parent_RotY=parent.getIpo().getCurve('RotY')REEDATA8d ipo_Parent_RotZ=parent.getIpo().getCurve('RotZ')REEDATA80e ipo_Parent_SizeX=parent.getIpo().getCurve('SizeX')EDATA8e ipo_Parent_SizeY=parent.getIpo().getCurve('SizeY')EDATA8f ipo_Parent_SizeZ=parent.getIpo().getCurve('SizeZ')EDATA hf except:DATAf ipo_Parent_LocX="none"iDATAf ipo_Parent_LocY="none"DATAHg ipo_Parent_LocZ="none"DATAg ipo_Parent_RotX="none"#DATAg ipo_Parent_RotY="none"DATA8h ipo_Parent_RotZ="none"DATAh ipo_Parent_SizeX="none"DATAh ipo_Parent_SizeY="none"DATA(i ipo_Parent_SizeZ="none"DATAxi PARENTS.append([parent,Init_Mat,ipo_Parent_LocX,ipo_Parent_LocY,ipo_Parent_LocZ,ipo_Parent_RotX,ipo_Parent_RotY,ipo_Parent_RotZ,ipo_Parent_SizeX,ipo_Parent_SizeY,ipo_Parent_SizeZ])DATA`j EEDATAj enfant=parentDATA j parent=parent.getParent()DATA0k DATAhk for parent in PARENTS:DATAk try:DATA4k if (parent[0].getData().getFlag() / 2**3) >0 :DATAXl return 1EEDATA l except:MDATA l passDATAm ndDATAPm DATADm #Retour de la matrice de decalage du au parent a la frame couranteDATA(n DecMatC=matrixForTraj(frameC,PARENTS)DATAXn obj=saveObjEEDATAn EEDATA$n try:LXC=ipoLocX.evaluate(frameC)DATA(o except:LXC=obj.LocXDATA$po try:LYC=ipoLocY.evaluate(frameC)DATAo except:LYC=obj.LocYDATA$p try:LZC=ipoLocZ.evaluate(frameC)4DATAhp except:LZC=obj.LocZ DATA@p vect=Blender.Mathutils.Vector([obj.LocX,obj.LocY,obj.LocZ,1])DATA q color=[0,1] EDATA`q DATA(q #En cas de modif de la trajectoireDATA(q if round(obj.LocX,5)<>round(LXC,5):ctDATA$Hr for bez in ipoLocX.bezierPoints:DATA0r if round(bez.getPoints()[0],tr)==frameCtr:EDATA(s bez.setPoints((frameCr,vect[0]))DATAXs ipoLocX.recalc()DATA(s if round(obj.LocY,5)<>round(LYC,5):DATA$s for bez in ipoLocY.bezierPoints:DATA0Pt if round(bez.getPoints()[0],tr)==frameCtr:DATA(t bez.setPoints((frameCr,vect[1]))DATAu ipoLocY.recalc()DATA(Pu if round(obj.LocZ,5)<>round(LZC,5): DATA$u for bez in ipoLocZ.bezierPoints:DATA0v if round(bez.getPoints()[0],tr)==frameCtr:DATA(`v bez.setPoints((frameCr,vect[2]))DATAv ipoLocZ.recalc()DATAw ?DATA,8w #Changement de couleur de la trajectoiretDATAw VertexFrame=[]DATAw try:DATA$x for bez in ipoLocX.bezierPoints:DATA8px VertexFrame.append(round(bez.getPoints()[0],tr))REEDATA0x if round(bez.getPoints()[0],tr)==frameCtr:DATA 8y color=[1,color[1]-0.3]DATAy except:passEEDATAy try:EDATA$z for bez in ipoLocY.bezierPoints:DATA8Xz VertexFrame.append(round(bez.getPoints()[0],tr))REEDATA0z if round(bez.getPoints()[0],tr)==frameCtr:DATA { color=[1,color[1]-0.3]DATAp{ except:passEEDATA{ try:DATA${ for bez in ipoLocZ.bezierPoints:DATA8@| VertexFrame.append(round(bez.getPoints()[0],tr))REEDATA0| if round(bez.getPoints()[0],tr)==frameCtr:DATA } color=[1,color[1]-0.3]pDATAX} except:passEEDATA} while len(VertexFrame)>0:DATA} frame=VertexFrame[0]DATA 0~ i=VertexFrame.count(frame)DATA ~ vertexX.append([frame,i])DATA~ for k in range(i):qqDATA0 VertexFrame.pop(VertexFrame.index(frame))DATAx DATA ##DATA DATA( DATA0` for frame in range(frameC-past,frameC+futur):DATA( DecMat=matrixForTraj(frame,PARENTS)DATA DATA$P try:LX=ipoLocX.evaluate(frame)DATA except:LX=obj.LocXDATA$ try:LY=ipoLocY.evaluate(frame)HDATAH except:LY=obj.LocYDATA$ try:LZ=ipoLocZ.evaluate(frame)DATA except:LZ=obj.LocZDATA00 vect=Blender.Mathutils.Vector([LX,LY,LZ,1]) DATA if frame==frameC: DATA(؃ LXC,LYC,LZC=vect[0],vect[1],vect[2]DATA0 DecMatC=DecMat DATAx vect=vect*DecMatDATA LocX.append(vect[0])DATA LocY.append(vect[1])DATAP LocZ.append(vect[2])DATA EEDATAЅ TDATA MatPreBuff=[]DATAH for i in range(4):NamDATA for j in range(4):EDATA(؆ MatPreBuff.append(matview[i][j])DATA0 DATAh DATA0 MatBuff=BGL.Buffer(GL_FLOAT,16,MatPreBuff)DATA DATA8 glLoadIdentity()>DATA  glMatrixMode(GL_PROJECTION)EEDATAЈ glPushMatrix()DATA glLoadMatrixf(MatBuff)DATAh DATA( glLineWidth("""+str(epaisseur)+""")oDATA DATA0 glBegin(GL_LINE_STRIP)DATA  for i in range(len(LocX)):tr=DATALЊ glColor3f((i+1)*1.00/len(LocX)*color[0],0,(i+1)*1.00/len(LocX)*color[1])DATA(P glVertex3f(LocX[i],LocY[i],LocZ[i])DATA EDATA  glEnd() bDATA$  if not Blender.Window.EditMode():DATAx glPointSize(5)t DATA glBegin(GL_POINTS)DATA TestPOINTS=[]DATAP TestFRAME=[]DATA for i in vertexX:DATA ؍ ix=int(i[0])-frameC+pastlllDATA ( if ix>=0 and ixpt[0]-4 and SourCo[1]>pt[1]-4 and SourCo[1]0:llDATA x ev=Blender.Window.QRead()[0]DATA$ if ev not in [4,5,18,112,213]:/DATA  SetKeyQualifiers(1)DATAh SetKeyQualifiers(0)DATA8 SetKeyQualifiers(Blender.Window.GetKeyQualifiers())EDATA QAdd(f,ev,1,0) DATA` QHandle(f)EEDATA Blender.Redraw()DATA, if ev in [RIGHTMOUSE,LEFTMOUSE,ESCKEY]:DATA H done=1ieDATADBlender.Set('curframe',\"\"\"+str(Blender.Get('curframe'))+\"\"\")DATA, Blender.Object.GetSelected()[0].select(0)DATA,` for OName in \"\"\"+str(objetNom)+\"\"\":DATA  obj=Blender.Object.Get(OName)DATA  obj.select(1)EDATA$P Blender.Window.SetCursorPos(0,0,0)DATA0 scripting=Blender.Text.Get('Edit_Trajectory')DATA scripting.clear()DATA P Blender.Text.unlink(scripting)DATA  \"\"\"REEDATA  DATA(  scene=Blender.Scene.GetCurrent()DATA p  try:DATA8  scripting=Blender.Text.Get('Edit_Trajectory')EEDATA  scripting.clear()DATA(h  Blender.Text.unlink(scripting)DATA  except:passDATA8 scripting=Blender.Text.New('Edit_Trajectory')REEDATA p scripting.write(script)DATA4 script=Blender.Text.Get('Edit_Trajectory')DATA( DATA` DATA DATA,hX Blender.Set('curframe',TestFRAME[k])DATA,ȭX oldObjS=Blender.Object.GetSelected()DATA for oObj in oldObjS:DATA(X oObj.select(0)>DATA pX TestLIST[j][0].select(1)DATA(X Blender.Run('Edit_Trajectory') DATA X if evnmt==RIGHTMOUSE :DATA,hX Blender.Set('curframe',TestFRAME[k])DATAȯXDATAXManip()DATA8XglPopMatrix()EEDATAxXglMatrixMode(GL_PROJECTION)DATAȰXglPopMatrix()EEDATAXglMatrixMode(GL_MODELVIEW)DATAXXDATAX """DATAȱXDATAX DATA8Xif ask_modif==0:DATAX supprtexte('Trajectory')DATA вX ecrire('Trajectory',DrawPart)DATA X if handle_mode==2:DATAhX Blender.UpdateMenus()DATAX else:DATA X lier('Trajectory','Redraw')DATA8Xif ask_modif==2:DATAX supprtexte('Trajectory')DATAXдX print("---End of Trajectory_'+str(__version__)+'.py---\n--- Thanks for use ---")##TXdZjTXTrajectory[h> eDATA[[PDATA[ \[ DATA \h\[lxDATAh\\ \`b DATA\\h\%XZDATA\@]\YDATA@]]\PC0RDATA]]@]DATA]^]FREEDATA^`^]@ctueDATA`^^^FREEDATA^^`^FREEDATA^8_^aleDATA8__^@FREEDATA__8_FREEDATA_`_FREEDATA`X`_0FREEDATAX```xll lDATA``X`izeXDATA`0a`llllDATA0axa`8izeYDATAxaa0a>llllDATAabxa>FREEDATAbPbahFREEDATAPbbbtvieDATAbbPbllllDATAb(cb("nonDATA(cpcbpb[k]DATApcc(cPoinDATAcdpcXewDATAdHdc91DATAP#!BPYEEDATA#2.41EEDATAp#This script is a part of Trajectory.py and have to be linked to the scene in Redraw if not in HANDLER mode.x5DATA `#Author : 3R - Regis MontoyaREEDATA(#It's better to use the Trajectory.pyDATA#To find help : DATADP#You can modify the two following value to change the path settingsDATA futur=35 DATApast=20DATA@objets_nom=['Cube.001']DATA DATAbbbDATAimport Blender,mathDATA @from Blender import BGL,DrawREEDATAfrom Blender.BGL import *"DATAfrom Blender.Draw import *DATA0from math import *DATAxDATADATA#Prise de la frame actuelleDATA 8frameC=Blender.Get('curframe')EDATA@renderingCont=Blender.Scene.getCurrent().getRenderingContext()lDATA@k=1.00*renderingCont.oldMapValue()/renderingCont.newMapValue()EDATAhif k<1:DATA tr=-1*int(log(k*0.1,10))EEDATAelse:EEDATA( tr=-1*int(log(k,10))rtDATAdp#Creation de la frame de comparaison, reelle et entiere (pour test rouge, place ipo, trace courbe)DATAframeCtr=round(frameC*k,tr)DATAXframeCr=frameC*kDATA frameC=int(round(frameC*k,0))EEDATAbbqDATA(###DATA,`#Listage des objets demandes dans $objetsDATA4objets=[o for o in Blender.Object.GetSelected()]selDATA(for objn in objets_nom:DATAp try:EEDATA, if objn not in [o.name for o in objets]:qDATA, objets.append(Blender.Object.Get(objn))qDATA h except:ix(DATA, print "Warning : "+str(objn)+"not found"lDATA DATA@@#Fonction de retour de la matrice des parent a une frame donneeDATA$def matrixForTraj(frame,PARENTS)::DATAL DecMatC=Blender.Mathutils.Matrix([1,0,0,0],[0,1,0,0],[0,0,1,0],[0,0,0,1])EDATA trDATA  for i in range(len(PARENTS)):EDATA parent=PARENTS[i][0]EDATA,X try:X=PARENTS[i][5].evaluate(frame)*pi/18DATA except:X=parent.RotXEDATA, try:Y=PARENTS[i][6].evaluate(frame)*pi/18DATA` except:Y=parent.RotYEDATA, try:Z=PARENTS[i][7].evaluate(frame)*pi/18DATA except:Z=parent.RotZEDATA(P try:LX=PARENTS[i][2].evaluate(frame)EDATA except:LX=parent.LocXDATA( try:LY=PARENTS[i][3].evaluate(frame)EDATAH except:LY=parent.LocYDATA( try:LZ=PARENTS[i][4].evaluate(frame)EDATA except:LZ=parent.LocZDATA(0 try:SX=PARENTS[i][8].evaluate(frame)DATA except:SX=parent.SizeXDATA( try:SY=PARENTS[i][9].evaluate(frame)DATA0 except:SY=parent.SizeYqDATA( try:SZ=PARENTS[i][10].evaluate(frame)DATA except:SZ=parent.SizeZqDATA( DATA` lDATAT NMat=Blender.Mathutils.Matrix([cos(Y)*cos(Z)*SX,SX*cos(Y)*sin(Z),-SX*sin(Y),0],qDATAl  [(-cos(X)*sin(Z)+sin(Y)*sin(X)*cos(Z))*SY,(sin(X)*sin(Y)*sin(Z)+cos(X)*cos(Z))*SY,sin(X)*cos(Y)*SY,0],qDATAh [(cos(X)*sin(Y)*cos(Z)+sin(X)*sin(Z))*SZ,(cos(X)*sin(Y)*sin(Z)-sin(X)*cos(Z))*SZ,SZ*cos(X)*cos(Y),0],DATAX [LX,LY,LZ,1])DATA( DecMatC=DecMatC*PARENTS[i][1]*NMatDATA return DecMatCDATA0DATAh#####DATA TestLIST=[]DATA(matview=Blender.Window.GetPerspMatrix()DATA 8###########DATA(x#Fonction de tracage des trajectoiresEEDATA ###########DATA DATAHdef Trace_Traj(obj):REEDATA global TestLIST,matviewDATA8 #On trace la trajectoire pour tout les objets listeEEDATAH DATA  LocX=[]DATA  LocY=[]TADATA  LocZ=[]TADATA4@ #Liste contenant les points vertex de trajectoireDATA vertexX=[]REEDATA try:DATA,  ipoLocX=obj.getIpo().getCurve('LocX')]DATA, ipoLocY=obj.getIpo().getCurve('LocY')=[]DATA, ipoLocZ=obj.getIpo().getCurve('LocZ')calDATA,@ ipoTime=obj.getIpo().getCurve('Time')DATA  except:TADATA ipoLocX="none"DATA( ipoLocY="none"DATAp ipoLocZ="none"DATA ipoTime="none"DATA, if not(ipoTime==None or ipoTime=="none"):DATA ` return 0DATA DATA8 #Initialisation de la boucle de recuperage parents)EDATA@ parent=obj.getParent()qqDATA saveObj=objEEDATA enfant=objREEDATA PARENTS=[]REEDATAP DATA( #Boucle de get des info des parents :DATAX #liste de [nom,matrice initiale au parentage, ipo en X,Y,Z,rotX,rotY,rotZ,sizeX,Y,Z]EDATA0h while type(parent)==Blender.Types.ObjectType:DATAH Init_Mat=Blender.Mathutils.Matrix(enfant.getMatrix('worldspace'))REEDATA@ Init_Mat.invert()cXDATA4 Init_Mat=Init_Mat*enfant.getMatrix('localspace')DATA( Init_Mat=parent.getMatrix()*Init_MatDATAH Init_Mat.invert()DATA DATA try:DATA8 ipo_Parent_LocX=parent.getIpo().getCurve('LocX')REEDATA8h ipo_Parent_LocY=parent.getIpo().getCurve('LocY'))EDATA8 ipo_Parent_LocZ=parent.getIpo().getCurve('LocZ')REEDATA88 ipo_Parent_RotX=parent.getIpo().getCurve('RotX'))DATA8 ipo_Parent_RotY=parent.getIpo().getCurve('RotY')qEEDATA8 ipo_Parent_RotZ=parent.getIpo().getCurve('RotZ')REEDATA8p ipo_Parent_SizeX=parent.getIpo().getCurve('SizeX')EDATA8 ipo_Parent_SizeY=parent.getIpo().getCurve('SizeY')EDATA8@ ipo_Parent_SizeZ=parent.getIpo().getCurve('SizeZ')EDATA  except:#DATA ipo_Parent_LocX="none"DATA8 ipo_Parent_LocY="none"DATA ipo_Parent_LocZ="none"lDATA ipo_Parent_RotX="none"lDATA( ipo_Parent_RotY="none"lDATAx ipo_Parent_RotZ="none"lDATA ipo_Parent_SizeX="none"DATA ipo_Parent_SizeY="none"DATAh ipo_Parent_SizeZ="none"DATA PARENTS.append([parent,Init_Mat,ipo_Parent_LocX,ipo_Parent_LocY,ipo_Parent_LocZ,ipo_Parent_RotX,ipo_Parent_RotY,ipo_Parent_RotZ,ipo_Parent_SizeX,ipo_Parent_SizeY,ipo_Parent_SizeZ])DATA trDATA enfant=parent DATA  parent=parent.getParent()REEDATAp DATA for parent in PARENTS:t()DATA try:DATA40 if (parent[0].getData().getFlag() / 2**3) >0 :DATA return 1EEDATA  except:DATA  passTADATAX DATA trDATAD #Retour de la matrice de decalage du au parent a la frame couranteDATA(@ DecMatC=matrixForTraj(frameC,PARENTS)DATA obj=saveObjEEDATA trDATA$ try:LXC=ipoLocX.evaluate(frameC)qDATAh except:LXC=obj.LocX"DATA$ try:LYC=ipoLocY.evaluate(frameC)qDATA except:LYC=obj.LocYEEDATA$P try:LZC=ipoLocZ.evaluate(frameC)qDATA except:LZC=obj.LocZdDATA@ vect=Blender.Mathutils.Vector([obj.LocX,obj.LocY,obj.LocZ,1])DATA` color=[0,1] EDATA DATA( #En cas de modif de la trajectoire#"DATA(0 if round(obj.LocX,5)<>round(LXC,5):EEDATA$ for bez in ipoLocX.bezierPoints:DATA0 if round(bez.getPoints()[0],tr)==frameCtr:EDATA(@ bez.setPoints((frameCr,vect[0]))EEDATA ipoLocX.recalc()DATA( if round(obj.LocY,5)<>round(LYC,5):EEDATA$8 for bez in ipoLocY.bezierPoints:DATA0 if round(bez.getPoints()[0],tr)==frameCtr:DATA( bez.setPoints((frameCr,vect[1]))EEDATAH ipoLocY.recalc()DATA( if round(obj.LocZ,5)<>round(LZC,5):EEDATA$ for bez in ipoLocZ.bezierPoints:DATA0@ if round(bez.getPoints()[0],tr)==frameCtr:EDATA( bez.setPoints((frameCr,vect[2]))EEDATA ipoLocZ.recalc()DATA@ DATA,x #Changement de couleur de la trajectoiretDATA VertexFrame=[]lllDATA  try:EDATA$X for bez in ipoLocX.bezierPoints:DATA8 VertexFrame.append(round(bez.getPoints()[0],tr))REEDATA0 if round(bez.getPoints()[0],tr)==frameCtr:EDATA x color=[1,color[1]-0.3]REEDATA except:passEEDATA try:EDATA$@ for bez in ipoLocY.bezierPoints:DATA8 VertexFrame.append(round(bez.getPoints()[0],tr))REEDATA0 if round(bez.getPoints()[0],tr)==frameCtr:EDATA ` color=[1,color[1]-0.3]REEDATA except:passEEDATA try:EDATA$( for bez in ipoLocZ.bezierPoints:DATA8 VertexFrame.append(round(bez.getPoints()[0],tr)))EDATA0 if round(bez.getPoints()[0],tr)==frameCtr:EDATA H color=[1,color[1]-0.3]REEDATA except:passEEDATA while len(VertexFrame)>0:DATA( frame=VertexFrame[0]DATA p i=VertexFrame.count(frame)EEDATA  vertexX.append([frame,i])REEDATA  for k in range(i):llDATA0X  VertexFrame.pop(VertexFrame.index(frame))EEDATA  DATA  DATA(  DATA`  DATA0  for frame in range(frameC-past,frameC+futur):DATA(  DecMat=matrixForTraj(frame,PARENTS)EDATAP  DATA$  try:LX=ipoLocX.evaluate(frame)qqDATA  except:LX=obj.LocXieDATA$(  try:LY=ipoLocY.evaluate(frame)qqDATA  except:LY=obj.LocYDATA$  try:LZ=ipoLocZ.evaluate(frame)ctDATA  except:LZ=obj.LocZnfDATA0h  vect=Blender.Mathutils.Vector([LX,LY,LZ,1])EDATA  if frame==frameC:###DATA( LXC,LYC,LZC=vect[0],vect[1],vect[2]DATAh DecMatC=DecMatDATA vect=vect*DecMatDATA LocX.append(vect[0])DATA@ LocY.append(vect[1])DATA LocZ.append(vect[2])DATA sDATA DATA@ MatPreBuff=[]DATA for i in range(4):DATA for j in range(4):DATA( MatPreBuff.append(matview[i][j]))EDATAh DATA DATA0 MatBuff=BGL.Buffer(GL_FLOAT,16,MatPreBuff)):DATA8 DATAp glLoadIdentity()DATA  glMatrixMode(GL_PROJECTION)EEDATA glPushMatrix()DATAP glLoadMatrixf(MatBuff)qDATA DATA glLineWidth(2)DATA  DATAX glBegin(GL_LINE_STRIP)DATA  for i in range(len(LocX)):REEDATAL glColor3f((i+1)*1.00/len(LocX)*color[0],0,(i+1)*1.00/len(LocX)*color[1])DATA(x glVertex3f(LocX[i],LocY[i],LocZ[i])EDATA PDATA  glEnd() dDATA$H if not Blender.Window.EditMode():DATA glPointSize(5)DATA glBegin(GL_POINTS)DATA0 TestPOINTS=[]DATAx TestFRAME=[]DATA for i in vertexX:REEDATA  ix=int(i[0])-frameC+pastREEDATA P if ix>=0 and ixpt[0]-4 and SourCo[1]>pt[1]-4 and SourCo[1]0:):DATA p/ ev=Blender.Window.QRead()[0]EDATA$/ if ev not in [4,5,18,112,213]:eptDATA0 SetKeyQualifiers(1)EDATA`0 SetKeyQualifiers(0)DATA80 SetKeyQualifiers(Blender.Window.GetKeyQualifiers())EDATA1 QAdd(f,ev,1,0)DATAX1 QHandle(f)EEDATA1 Blender.Redraw()DATA,1 if ev in [RIGHTMOUSE,LEFTMOUSE,ESCKEY]:0:DATA @2 done=1x(DATA@2Blender.Set('curframe',"""+str(Blender.Get('curframe'))+""")REEDATA,2Blender.Object.GetSelected()[0].select(0)qqDATA$P3for OName in """+str(objetNom)+""":DATA 3 obj=Blender.Object.Get(OName)EDATA3 obj.select(1)EDATA$84Blender.Window.SetCursorPos(0,0,0)[DATA04scripting=Blender.Text.Get('Edit_Trajectory')EEDATA4scripting.clear()DATA 85Blender.Text.unlink(scripting)#DATA 5 """DATA5 DATA(6 scene=Blender.Scene.GetCurrent()DATA X6 try:DATA86 scripting=Blender.Text.Get('Edit_Trajectory')EEDATA7 scripting.clear():DATA(P7 Blender.Text.unlink(scripting)DATA7 except:pass#DATA87 scripting=Blender.Text.New('Edit_Trajectory')REEDATA X8 scripting.write(script)EDATA48 script=Blender.Text.Get('Edit_Trajectory')?DATA9 DATAH9 DATA9 DATA,9 Blender.Set('curframe',TestFRAME[k])DATA,: oldObjS=Blender.Object.GetSelected()DATAx: for oObj in oldObjS:DATA: oObj.select(0)LDATA ; TestLIST[j][0].select(1)DATA(`; Blender.Run('Edit_Trajectory')EEDATA ; if evnmt==RIGHTMOUSE :EDATA,< Blender.Set('curframe',TestFRAME[k])DATAh<DATA<Manip()DATA<glPopMatrix()EEDATA=glMatrixMode(GL_PROJECTION)DATAh=glPopMatrix()EEDATA=glMatrixMode(GL_MODELVIEW)lDATA=DATA0> OBBGEOBCameraamera.001 `F /$C?+qA???*?91]x75e?icK=3>$C?+qA??????T1в #?:[0N)S3?c3w^,iO4?OBdA?)d??>)d????OBEG IBOBCube.001T]Hި@2;VAXA?vވ?--mm@Y'?X'?);<??o@^=9^R ?X'?ި@2;VAXA????@L?Q jGǣv">rK>d2%>.n>vS@O\ij1@?DOBdA? #=?>=?@???(TDATAHOB IGHLEOBCube.002@a?vވ?--mZ@E_@[3)?)?(?ʆ??b?xx>b?(??vވ?--m?X>_c?`cW>%?U?z?&e:r%>͈U?'m?>S@_v_@?DOBdA? #=?>=?@???h OBHLGpO IOBEmptyEiO 0eY@ި@2;VAXA2?2?2?d%԰,A$8???F(>]@>>=UD [@?@4\tKv>L=r%;>O=@Cko??DOBdA? #=?>=?@???OBpOGRHLOBEmpty.001B`ɥ=S8$C?+qA???厾??.w;sxQ?\i?rsD>.8195e?4>@>oF?:?Ȥ='?81.[L:=85e?͓d?U;>{NA7~@?DOBdA? #=?>=?@???OBRGUpOOBCube0ZW@;@S@סR@LDu>u>u>??u>u>u>W@;@S@????Se?to@ 4?ҿ2?>?f?eg?^]4A?DOBdA? #=?>=?@???`9OBUGROBLamp /yFzh@A????d8???{x>x?7= ;-yFzh@A?????{x>&;n?x?-<{7=v?LJ>д!ќ?DOBdA? #=?>=?@???MAX!MAMaterialC ?>1b>??????????L????2 ???????@?=?==????MEZ.]MECube88][x\ 3???DATA[3??II?I?I???III??II?I??IIDATAx\0 """"""""""""DATAx8]/ME].@aZMECube.001?^`__ 3???DATA^XDATA_3??II?I?I???III??II?I??IIDATA_0 """"""""""""DATAx`/ME@a.]MECube.002?c0bc 3???DATA0b3??II?I?I???III??II?I??IIDATAc0 """"""""""""DATAxc/GLOBrX ( EDNA1?@ A!BC7 "DEFGHIJKLMNO*P#$Q%R%STUVWXYZ[\]^!_`abcd&efgh'i(jklmnopqrstuvwxyz{|) }~  *stu+*,'i##FGTUE(44y*#)+,-2rstuvFG&*P.*/_rstu     ef+ +!"#$%&'()&**+,-./012345678P09:1 !_2223;<=>?@ABCDEFGHIJ4KL43; M N*/OPqQpRSTU5 VWXYZ[\]^6_WX[^777`^abcdefghij6k5lm8n`09o:63; p N'q'r's*;tu/O vQpRqwPxyz{cd49|}~0000988<'===6k5l  <> ? 3; *u/O@> ABCDE?F qQpRP@`BGXCGA`DstuEHHH"IH7  JH'i"KH'i"LHMHNHO HyPHE0'iQ H'i"RHSH'iTab06*uUUU"3FpV''_ ''*;t3;WX    N  /OQpRD      !"#P$P % & ' ( )*+,-./ 0 1 2Y3Z4[5V6V789:\;]<]=^^^'>"?@Y ABCDEFGHIJK__ZLM`NaOPQRSTUVWXYZE[\]^0__`,\abcdefghijklmnopqrs?t?u?vwxyb8rz{|}~*&Pcddd'ie  f  0ghbef]B      !"#$i%E0'jjj&'k ()*+,E-./010'l'2b3l4# 5d6m789:;<=>? @cA iBkChsgDP EnFGHIo #(jBJKLMNp5qqOPrQRSTUVWXYZ['2o\p]^_`abHcdefgo8hijklmnopqrs3t uvw0sxyz{|}~qqqOPrQRtqqOPrQRuqqOPrQR0s  *+lvqqOPrQRsl mNEw qqOPrQRsJ0xqqOPrQRyz {qqOPrQRs   |}qqOPrQRs#Jl~ qqOPrQRlsqqOPrQR 7l qqOPrQ07lqqOPrQsQqqOPrQ     0%   !"#$%&$'()*+,-./0123456789:;<=>?@ABCDEFGH"IJKLMNOPQRSTUVWX_-YZ[\]^_`abcdefghijklmnopqrst uvwxyz{|}~E0'   l @rrrOP     %RT 4 9 }~  & 4*l$Q      4)Z,Ny| "^   "     "E0"/""0"""E' !" #$%E0" &''( ")*+,-./ 01% 20'" &3456' W7"89:;cd< =>?@=AB 6'?C"DEl'2"' FGQRHIJK "ELM'NOPQRSTU "ELMm7VWXYZ['\!]E0"^_ 0 `" ' abcdefgh i!_!j k*Blmnopq7rstuvwxyz{|qqOPrQs=0]"}''*QpRD    ~' m   "Xp/   0"wE0  QpDtX * "cW qqOPrQRsW* c 'X0'cd'c'c' 'NW7' ' 'E0q   '*W78ENDB