BLENDER_V237REND 10SRtń[Ŝ\SRipoŅ<Ň|Ňŋ<ŋ|ŗQSRDATAŅ<\Ņ|DATAŅ|\ŅŅ<DATAŅ\ŅŅ|RDATAŅ\ņ<ŅRDATAņ<\ņ|ŅDATAņ|\ņņ<RDATAņ\ņņ|DATAņ\Ň<ņRDATAŇ<\Ň|ņDATAŇ|\Ň<DATAŇ]ŇŅ|ŅDATAŇ]ň<ŇŅ<ŅDATAň<]ň|ŇŅ<ņ<DATAň|]ňň<Ņņ|DATAň]ňň|ņ<ņ|DATAň]ʼn<ňŅ|ņDATAʼn<]ʼn|ňŅņDATAʼn|]ʼnʼn<ņņDATAʼn]ʼnʼn|ņ<Ň<DATAʼn]Ŋ<ʼnņ|Ň<DATAŊ<]Ŋ|ʼnņŇ|DATAŊ|]ŊŊ<ņŇ|DATAŊ]ŊŊ|ņ<ņDATAŊ]ŋ<ŊŇ<Ň|DATAŋ<]Ŋņ|ņDATAŋ|_Œ<Ņ<ņ<ņ|ŅRRRSŏŐŌ|ŎDATAŌ|^ōLOutputRender>DATAōL^ŎŌ|RenderRender@>DATAŎ^ŎōLAnimRender>DATAŎ^ŎFormatRender>DATAŏLŐ?3336DCdBNDhhA;{C[HCB(DC??SdDATATŐNŏ?3336/9DATAŒ<_œ<ŋ|ņŅ|ŅņRRRSDATAœ<_ŗŒ<ņ<ņŇ|Ň<=O2=Eo?aŖDATAhGŔ<?3336L???x=д????>xд?=O2=EoW~::?A$AS>xд?=O2=Eo????x=д??AS B ?=Cx=д DATATŔ<Nŕ?3336LOAD FILE/9DATAŕKŖŔ<?3336LCz A Cz A <# <# Fj`Dz OBDATAŖLŕ?3336LDCdDvC@CB(DC??DATAŗ_œ<Ň<Ň|ņņ|??CAMHRRRŘś\DATAŘK?3336Cz A Cz A ee<# <# Fj`Dz OBDATAhGřŘ?3336?w?w/??w?wƀ???A??C4G4w*@DATAŧ ^ŧŦDATAŧ^Ũŧ AnimRender>DATAŨ^ŧFormatRender>DATAũ|LŪ|?333ť<DCd[DmpCdCB(DC??SdDATATŪ|Nũ|?333ť<SELECT FONT PATH/Library/Fonts/_1/../../der (b)/../ (ej b)/../d forge test/../d2005.blend DATAū_Ŭť<Ş|ŝ<ŝ|ŞRRRS\,DATAŬ_űūŞşşŞ<=E=~o?RRR }ŰμμDATAhGŭ?333Ŭ??@?@=д9x? ?%@%@ @??% @>xд G8?Eo=E裉=~ ě::B{:{? :AS'x'p pA3@>xд3@?=E=~o???@?@=д9x??AS B ??=Cx=дrr DATATŭNů|?333ŬOAD FILE/9DATAů|KŰŭ?333ŬCz A Cz A <# <# Fj`Dz OBDATAŰLů|?333ŬDCdDvC@CB(DC??DATAű_ŶŬŝş|şŞ=E=fo? }ŴDATAhGŲ?333ű?3?3o1m} x? `??3?3?o1m? `?} z?=E1T;n=fڮ8B]?AS4iA0C?o1n? `?} y?=E=fo??3?3o1m} x? `??55AS B ??=Co1m `} ygg DATAŲKų?333űCz A Cz A <# <# Fj`Dz OBDATAųLŴŲ?333űDCdDvC@CB(DC??DATATŴNų?333űSELECT SCRIPT PATH//Applications/blender/python/../der/../on/../2flender.py FDATAŶ_źűş|Ş|ş<ş=E=o? }ŷDATAhGŸ?333Ŷ???x=д????>xд?=E=oL;b?ASAbj>xд?=E=o????x=д??AS B ??=Cx=д`` DATAŸKŹ?333ŶCz A Cz A <# <# Fj`Dz OBDATAŹLŷŸ?333ŶDCdDvC@CB(DC??DATATŷNŹ?333ŶSave AsE/Volumes/ANTPORT_1/Ant/palaver/blender/./subsurfs_start.blendJ4DATAź_Ŷşş<Şş?@DlAMHRRR}ž< < <DATAhGŻ?333ź?w?w/??w?wƀ??4/ ?A?@Dl4G4w@3WB"i*64w@(?@DlAMH?w?w/??55AS B ??=Cx=д`` DATATŻNŽ,?333źOAD FILE/9DATAŽ,Kž<Ż?333źCz A Cz A <# <# Fj`Dz OBDATAž<LŽ,?333źDCdDvC@CB(DC??SRtſ<[ҜŜ\SRscreenſ\ 1DATAſ\DATA\\ſDATA\\DATA\\DATA\DATA\\DATA\\DATA\\DATA\xDATA\xDATA\]œ\DATAœ]\ſDATA]œſDATA]\DATA\]ÜDATAÜ]\\DATA]Ü\DATA]\\DATA\]ĜDATAĜ]\DATA]Ĝ\DATA]\DATA\]ŜDATAŜ]\DATA]Ŝ\DATA_ɜſdDATAL?333DCdzIDՅAPCVCB(DC??DATATN?333/9DATAɜ_ʜ\\dDATAʜ_ ɜ\=m |=ao?uuuv3˜͌DATA˜P|?333CC;?݀?v?DATA|K˜?333Cz?Cz@55<# <# Fj`F@ OBCz?DATAhG͌|?333????????=m |=ao?A=pAW <??A=p B ?<# C;;DATAT͌N?333LOAD FILE/+ant/anters/eget/e/../a6.jpgndDATA _ʜ??P{{{d DATA K?333Cz?Cz@??<# <# Fj`Dz OBCz?DATAhG ?333??? ????A ???PAA ?O!?jG}CBH?A  B ?<# C@h@hDATATN?333/9SRtҜ[lſ<SRscreen.002<<|ڼ1DATA<\|DATA|\Ӽ<DATAӼ\|DATA\<ӼDATA<\|DATA|\Լ<DATAԼ\|DATA\<ԼDATA<\|DATA|\ռ<DATAռ\|`DATA\ռ`DATA<]||ӼDATA|]ּ<<DATAּ]|<<DATA]<ּ|DATA<]|<|DATA|]׼<|ԼDATA׼]|ӼDATA]<׼ԼDATA<]|<<DATA|]ؼ<Լ<DATAؼ]||DATA]<ؼ||DATA<]|<|DATA|]ټ<<ռDATAټ]||ռDATA]<ټԼDATA<]|DATA|]<ռDATAڼ_<<<|CdۼܼDATAۼLܼ?333DCdzIDՅAPCVCB(DC??DATATܼNۼ?333/9DATA<_<ڼԼ|ӼdDATA<_<<<||=8>iιo? d< DATA<M?333CzACzAA @FB=A DATAhG <?333????????=8>iιo?Afff@&D??Afff B ?<# CDATAT N?333AVE TARGA/t1.blend9DATA_<ռ|=8>Ho?ccc d\DATAM ?333CzACzA1||1A @FB=A DATAh G\?333????????=8>Ho?Afff@*??Afff B ?<# C>>DATAT\N ?333AVE TARGA/t1.blend9DATA_<Լռ=8>o?]]]^dDATAK?333B?B?<# <# Fj`Dz SQB?DATAhG?333????????=8>o?Afff@ϒ??Afff B ?<# CzzDATATN?333OAD FILE/9SRtl[ҜSRscripts L LQSRDATA \LDATAL\ DATA\LRDATA\ RDATA \LDATAL\ RDATA\LDATA\ RDATA \LDATAL\ DATA]LDATA]  DATA ]L  DATAL] LDATA]L LDATA] LDATA ]LDATAL] DATA]L  DATA] L DATA ]LLDATAL] LDATA]L DATA]  LDATA ]LDATAL_   LRRRSLDATAL^OutputRender>DATA^LRenderRender@>DATA^AnimRender>DATA^FormatRender>DATAL?3339EDCdBNDhhA;{C[HCB(DC??SdDATATN?3339E/9DATA _ LLRRRSDATA _  L =O2=Eo?aDATAhG ?3337???x=д????>xд?=O2=EoW~::?A$AS>xд?=O2=Eo????x=д??AS B ?=Cx=д DATAT N?3337OAD FILE/9DATAK ?3337Cz A Cz A <# <# Fj`Dz OBDATAL?3337DCdDvC@CB(DC??DATA_  LL??CAMHRRR LDATAxR< ?3339'U% =DATA<K?3339'Cz A Cz A ee<# <# Fj`Dz OBDATAhGL<?3339'?w?w/??w?wƀ???A??C4G4w*@E(DATA>  CAllCACamera=BB @?LA LALamp?????AB4>???B B4?@@???TXd<UTXS2flender.py,ʪl,, DATA,/Applications/blender/python/S2flender.pyDATA,l(DATAl,ʪ%DATAlʪDATA,ʫ< ?DATA,lʫ|BpDATAl,ʫ: %x1DATAl|owseDATA,ʬ,?DATA,lʬ*DATAl,ʬDATAlʭ,I*DATA,ʭIDATA,lʮ,F gnDATAl,ʮ(pDATAlʮ|DATA ,ʯ,DDATA , lʯCDATA l  ,ʰ BgnDATA   lʰ|1gnDATA  , ʰDATA , l ʱ F@DATA l  ,ʱ|@DATA   lʱNDATA  , ʲlDATA , l ʲ?DATA l  ,ʳ ?DATA   lʳ|ZDATA  , ʴ SDATA , l ʴNDATA l  ,ʵ ?DATA   lʵ|DATA  , ʵADATA , l ʶDATA l  ,ʶLDATA   lʶDATA , ʶBDATA,l ʷ,DATAl,ʷlDATAlʷ6DATA,ʸ DATA,lʸ\DATAl,ʸDATAlʸDATA,ʹLDATA,lʹDATAl,ʹ DATAlʺ,DATA,ʺlDATA,lʺDATAl,ʺ?DATAlʻ<DATA,ʻ|?DATA,lʻDATAl,ʼ, DATAlʼlDATA,ʼ DATA,lʼDATAl,ʽ< DATAlʽ|DATA,ʽDATA,lʽDATAl,ʾ,DATAlʾlDATA,ʾDATA,lʾ DATAl,ʿ DATAlʿ\DATA,ʿ DATA,lʿ DATAl, DATAl<DATA,|DATA,l DATAl, DATAlL DATA,DATA,l DATAl,DATAl<DATA,l$DATA,l¼DATAl,DATAl<DATA,|DATA,lüDATAl,DATAl,DATA,\DATA,lĜDATAl,DATAlDATA,<DATA,l| DATAl,DATAl DATA,LDATA,lƌDATAl,DATAl DATA,LDATA,lnj DATAl,DATAl DATA,<%DATA,lȌ DATAl,DATAlDATA ,<DATA , lɌDATA l  ,DATA   lDATA !, LDATA!,!l ʌDATA!l!!,DATA!!!lDATA!",!<DATA","l!|DATA"l"",˼&DATA"""l DATA"#,"LDATA#,#l"̜ DATA#l##,DATA###lDATA#$,#lDATA$,$l#ͬDATA$l$$,DATA$$$lLDATA$%,$|DATA%,%l$DATA%l%%,DATA%%%l< DATA%&,%όDATA&,&l%ϼDATA&l&&, DATA&&&l\DATA&',&ЬDATA','l&DATA'l'', DATA'''lL DATA'(,'ь DATA(,(l'DATA(l((, DATA(((lLDATA(),(ҌDATA),)l(DATA)l)),DATA)))l<DATA)*,)| DATA*,*l)Ӽ DATA*l**,DATA***l,?DATA*+,*ԜDATA+,+l*?DATA+l++,LDATA+++lՌDATA+,,+DATA,,,l+,DATA,l,,,lDATA,,,lּDATA,-,,DATA-,-l,, DATA-l--,l DATA---l׬DATA-.,- DATA.,.l-,DATA.l..,l DATA...lجDATA./,. DATA/,/l., DATA/l//,l DATA///l٬DATA/0,/DATA0,0l/,DATA0l00,l DATA000lڬ DATA01,0 DATA1,1l0, DATA1l11,l-DATA111lDATA12,1 DATA2,2l1LDATA2l22,ܜDATA222lDATA23,2<DATA3,3l2݌DATA3l33,DATA333lDATA34,3l DATA4,4l3ެDATA4l44,DATA444l,DATA45,4lDATA5,5l4߬DATA5l55,DATA555l,DATA56,5l DATA6,6l5 DATA6l66,DATA666l,DATA67,6lDATA7,7l6DATA7l77,DATA777l?DATA78,7DATA8,8l7?DATA8l88,<DATA888ll DATA89,8DATA9,9l8DATA9l99,DATA999l\DATA9:,9!DATA:,:l9DATA:l::,,DATA:::llDATA:;,:DATA;,;l:DATA;l;;,<DATA;;;lDATA;<,;DATA<,,=DATA>,>l= DATA>l>>,LDATA>>>l DATA>?,> DATA?,?l> DATA?l??,LDATA???l| DATA?@,?DATA@,@l?DATA@l@@,, DATA@@@llDATA@A,@DATAA,Al@DATAAlAA,DATAAAAlL$DATAAB,ADATAB,BlADATABlBB,DATABBBllDATABC,B DATAC,ClB DATAClCC,,DATACCCl\ DATACD,CDATAD,DlCDATADlDD, DATADDDl\DATADE,DDATAE,ElDDATAElEE, DATAEEEl\DATAEF,EDATAF,FlEDATAFlFF, DATAFFFl\DATAFG,FDATAG,GlF DATAGlGG,DATAGGGlLDATAGH,GDATAH,HlGDATAHlHH, DATAHHHl<DATAHI,H|DATAI,IlHDATAIlII,DATAIIIl,DATAIJ,IlDATAJ,JlI,DATAJlJJ,DATAJJJl<'DATAJK,JDATAK,KlJDATAKlKK, DATAKKKl\ DATAKL,KDATAL,LlKDATALlLL,,DATALLLl\,DATALM,LDATAM,MlL%DATAMlMM,L DATAMMMlDATAMN,MDATAN,NlM DATANlNN,LDATANNNl|DATANO,N DATAO,OlNDATAOlOO,, DATAOOOllDATAOP,ODATAP,PlODATAPlPP,DATAPPPlLDATAPQ,PDATAQ,QlPDATAQlQQ, DATAQQQl<DATAQR,Q|DATAR,RlQDATARlRR, DATARRRlL DATARS,R DATAS,SlRDATASlSS, DATASSSl<DATAST,SlDATAT,TlS9DATATlTT,ADATATTTlDATATU,TDATAU,UlT)DATAUlUU,|DATAUUUl7DATAUV,U (DATAV,VlUlDATAVlVV,DATAVVVl DATAVW,VLDATAW,WlVDATAWlWW,DATAWWWlDATAWX,W<DATAX,XlW|DATAXlXX,DATAXXXlDATAXY,X,DATAY,YlX\DATAYlYY,DATAYYYlDATAYZ,Y ,DATAZ,ZlYlDATAZlZZ,'DATAZZZlDATAZ[,Z<DATA[,[lZ DATA[l[[, DATA[[[l DATA[\,[\DATA\,\l[DATA\l\\,,DATA\\\l,DATA\],\l%DATA],]l\ DATA]l]],DATA]]]l <DATA]^,] |DATA^,^l] DATA^l^^, DATA^^^l , DATA^_,^ lDATA_,_l^ DATA_l__, DATA___l 1DATA_`,_ |DATA`,`l_ DATA`l``, DATA```l LDATA`a,` DATAa,al` DATAalaa, ,DATAaaal |DATAab,a DATAb,bla DATAblbb,, DATAbbbllDATAbc,bDATAc,clb DATAclcc,< DATAcccl|DATAcd,c DATAd,dlcDATAdldd,<DATAdddll(DATAde,d DATAe,eldCDATAelee,DATAeeelDATAef,e DATAf,fle<DATAflff,|DATAfffl DATAfg,fDATAg,glf,DATAglgg,lDATAggglDATAgh,gDATAh,hlgDATAhlhh,\DATAhhhlDATAhi,hDATAi,ilh DATAilii,LDATAiiil|,DATAij,iDATAj,jli'DATAjljj,lDATAjjjlDATAjk,j DATAk,klj< DATAklkk,|DATAkkklDATAkl,k DATAl,llk<,DATAllll,DATAllll%DATAlm,l, DATAm,mlllDATAmlmm,DATAmmmlDATAmn,m,DATAn,nlm\DATAnlnn, DATAnnnlDATAno,nDATAo,olnl&DATAoloo,DATAooolDATAop,o,%DATAp,plo| DATAplpp, DATApppl DATApq,p< DATAq,qlp|DATAqlqq,1DATAqqql,DATAqr,qlDATAr,rlqDATArlrr,DATArrrl,DATArs,r|DATAs,slrDATAslss,  DATAsssl \DATAst,s "DATAt,tls DATAtltt,! DATAtttl!LDATAtu,t!&DATAu,ult!+DATAuluu,"<DATAuuul"|DATAuv,u"(DATAv,vlu#DATAvlvv,#lDATAvvvl#DATAvw,v$ DATAw,wlv$LDATAwlww,$.DATAwwwl$DATAwx,w%< DATAx,xlw% DATAxlxx,%,DATAxxxl&<DATAxy,x& DATAy,ylx& DATAylyy,', DATAyyyl'lDATAyz,y'DATAz,zly'DATAzlzz,(,DATAzzzl(\DATAz{,z(+DATA{,{lz(DATA{l{{,),DATA{{{l)l%DATA{|,{)DATA|,|l{)DATA|l||,*,5DATA|||l*DATA|},|**DATA},}l|+ DATA}l}},+\ DATA}}}l+0DATA}~,}+/DATA~,~l},\DATA~l~~,,<DATA~~~l- DATA~,~-LDATA,l~-DATAl,-DATAl.,DATAƀ,.|DATAƀ,ƀl.DATAƀlƀƀ,/ DATAƀƀƀl/\DATAƀƁ,ƀ/ DATAƁ,Ɓlƀ/DATAƁlƁƁ,0=DATAƁƁƁl0 DATAƁƂ,Ɓ0 DATAƂ,ƂlƁ1 ;DATAƂlƂƂ,1|:DATAƂƂƂl1DATAƂƃ,Ƃ2,EDATAƃ,ƃlƂ2DATAƃlƃƃ,2DATAƃƃƃl3DATAƃƄ,ƃ3lDATAƄ,Ƅlƃ3DATAƄlƄƄ,4 DATAƄƄƄl4\DATAƄƅ,Ƅ4DATAƅ,ƅlƄ4DATAƅlƅƅ,5<DATAƅƅƅl5DATAƅƆ,ƅ5 DATAƆ,Ɔlƅ6DATAƆlƆƆ,6LDATAƆƆƆl6DATAƆƇ,Ɔ6'DATAƇ,ƇlƆ7 DATAƇlƇƇ,7L DATAƇƇƇl7DATAƇƈ,Ƈ7?DATAƈ,ƈlƇ8,DATAƈlƈƈ,8l?DATAƈƈƈl8DATAƈƉ,ƈ9,DATAƉ,Ɖlƈ9lDATAƉlƉƉ,95DATAƉƉƉl: DATAƉƊ,Ɖ:<+DATAƊ,ƊlƉ: DATAƊlƊƊ,:DATAƊƊƊl; #DATAƊƋ,Ɗ;\DATAƋ,ƋlƊ;DATAƋlƋƋ,; DATAƋƋƋl<, DATAƋƌ,Ƌ,DATAƍƍƍl>\/DATAƍƎ,ƍ>EDATAƎ,Ǝlƍ?,YDATAƎlƎƎ,?)DATAƎƎƎl@ADATAƎƏ,Ǝ@DATAƏ,ƏlƎ@YDATAƏlƏƏ,Al DATAƏƏƏlADATAƏƐ,ƏADATAƐ,ƐlƏB,DATAƐlƐƐ,B|DATAƐƐƐlBDATAƐƑ,ƐBDATAƑ,ƑlƐC,DATAƑlƑƑ,C\DATAƑƑƑlCDATAƑƒ,ƑC DATAƒ,ƒlƑD DATAƒlƒƒ,D\DATAƒƒƒlDDATAƒƓ,ƒDDATAƓ,ƓlƒEDATAƓlƓƓ,E\DATAƓƓƓlEDATAƓƔ,ƓEDATAƔ,ƔlƓF5DATAƔlƔƔ,F|DATAƔƔƔlF+DATAƔƕ,ƔG DATAƕ,ƕlƔGLDATAƕlƕƕ,G|DATAƕƕƕlGDATAƕƖ,ƕHDATAƖ,ƖlƕHL$DATAƖlƖƖ,HDATAƖƖƖlHDATAƖƗ,ƖI, DATAƗ,ƗlƖIl DATAƗlƗƗ,IDATAƗƗƗlIKDATAƗƘ,ƗJ\>DATAƘ,ƘlƗJ#DATAƘlƘƘ,KDATAƘƘƘlKl=DATAƘƙ,ƘKJDATAƙ,ƙlƘL\[DATAƙlƙƙ,L DATAƙƙƙlM,GDATAƙƚ,ƙMDATAƚ,ƚlƙM_DATAƚlƚƚ,N|ADATAƚƚƚlN>DATAƚƛ,ƚO\>DATAƛ,ƛlƚO<DATAƛlƛƛ,P<<DATAƛƛƛlP DATAƛƜ,ƛPDATAƜ,ƜlƛQ8DATAƜlƜƜ,Q%DATAƜƜƜlQDATAƜƝ,ƜR,0DATAƝ,ƝlƜR%DATAƝlƝƝ,R&DATAƝƝƝlS,&DATAƝƞ,ƝS|3DATAƞ,ƞlƝS(DATAƞlƞƞ,T<DATAƞƞƞlTlDATAƞƟ,ƞT1DATAƟ,ƟlƞUDATAƟlƟƟ,UlDATAƟƟƟlUKDATAƟƠ,ƟV,DATAƠ,ƠlƟV|DATAƠlƠƠ,VDATAƠƠƠlVDATAƠơ,ƠW<1DATAơ,ơlƠW&DATAơlơơ,W DATAơơơlX,DATAơƢ,ơX\DATAƢ,ƢlơXDATAƢlƢƢ,XDATAƢƢƢlY DATAƢƣ,ƢY<DATAƣ,ƣlƢY6DATAƣlƣƣ,ZLDATAƣƣƣlZDATAƣƤ,ƣZDATAƤ,Ƥlƣ[ DATAƤlƤƤ,[L5DATAƤƤƤl[DATAƤƥ,Ƥ[WDATAƥ,ƥlƤ\|+DATAƥlƥƥ,\(DATAƥƥƥl]</DATAƥƦ,ƥ]DATAƦ,Ʀlƥ]/DATAƦlƦƦ,^<DATAƦƦƦl^|,DATAƦƧ,Ʀ^DATAƧ,ƧlƦ_#DATAƧlƧƧ,_lDATAƧƧƧl_)DATAƧƨ,Ƨ` DATAƨ,ƨlƧ`lDATAƨlƨƨ,`)DATAƨƨƨla DATAƨƩ,ƨal)DATAƩ,Ʃlƨa)DATAƩlƩƩ,b, DATAƩƩƩlblDATAƩƪ,Ʃb'DATAƪ,ƪlƩbDATAƪlƪƪ,c,DATAƪƪƪlclDATAƪƫ,ƪc DATAƫ,ƫlƪcDATAƫlƫƫ,d,LDATAƫƫƫldDATAƫƬ,ƫdDATAƬ,Ƭlƫe,DATAƬlƬƬ,e|0DATAƬƬƬleDATAƬƭ,Ƭf, DATAƭ,ƭlƬflDATAƭlƭƭ,fEDATAƭƭƭlg DATAƭƮ,ƭg<DATAƮ,Ʈlƭg|DATAƮlƮƮ,gDATAƮƮƮlh DATAƮƯ,Ʈh\DATAƯ,ƯlƮh$DATAƯlƯƯ,h DATAƯƯƯli<DATAƯư,Ưil3DATAư,ưlƯiDATAưlưư,iDATAưưưlj<DATAưƱ,ưj|DATAƱ,ƱlưjDATAƱlƱƱ,jDATAƱƱƱlk,DATAƱƲ,ƱklDATAƲ,ƲlƱk DATAƲlƲƲ,kDATAƲƲƲll,?DATAƲƳ,ƲlDATAƳ,ƳlƲl?DATAƳlƳƳ,mLDATAƳƳƳlm|DATAƳƴ,ƳmDATAƴ,ƴlƳmDATAƴlƴƴ,n,DATAƴƴƴlnlDATAƴƵ,ƴnDATAƵ,Ƶlƴn DATAƵlƵƵ,o,"DATAƵƵƵlo|-DATAƵƶ,Ƶo DATAƶ,ƶlƵp DATAƶlƶƶ,p\DATAƶƶƶlp>DATAƶƷ,ƶpDATAƷ,Ʒlƶq<DATAƷlƷƷ,q|DATAƷƷƷlqDATAƷƸ,ƷqDATAƸ,ƸlƷr<DATAƸlƸƸ,rDATAƸƸƸlrDATAƸƹ,Ƹs,DATAƹ,ƹlƸs| DATAƹlƹƹ,sDATAƹƹƹlt DATAƹƺ,ƹtLDATAƺ,ƺlƹt DATAƺlƺƺ,tPDATAƺƺƺlu\ DATAƺƻ,ƺuDATAƻ,ƻlƺuDATAƻlƻƻ,vDATAƻƻƻlv\ DATAƻƼ,ƻvDATAƼ,ƼlƻvDATAƼlƼƼ,wDATAƼƼƼlw\ DATAƼƽ,ƼwDATAƽ,ƽlƼwDATAƽlƽƽ,xDATAƽƽƽlxLDATAƽƾ,ƽxDATAƾ,ƾlƽxDATAƾlƾƾ,yDATAƾƾƾly\DATAƾƿ,ƾyDATAƿ,ƿlƾyDATAƿlƿƿ,z DATAƿƿƿlzLDATAƿ,ƿz DATA,lƿzDATAl,{ ?DATAl{|DATA,{:DATA,l|,4DATAl,|;DATAl|DATA,},8DATA,l}9DATAl¬,~ DATA¬l~\?DATA,¬~DATA,l~?DATAlì,lDATAìlDATA,ìDATA,lˀ, DATAlĬ,ˀlDATAĬlˀDATA,ĬˀDATA,lˁDATAlŬ,ˁ\DATAŬlˁDATA,ŬˁDATA,l˂DATAlƬ,˂\ DATAƬl˂ DATA,Ƭ˂ DATA,l˃?DATAlǬ,˃CDATAǬl˃DATA,Ǭ˄<DATA,l˄DATAlȬ,˄DATAȬl˅,DATA,Ȭ˅|DATA,l˅DATAlɬ,ˆ =DATAɬlˆ| DATA,ɬˆDATA,lˆ#DATAlʬ,ˇ<DATAʬlˇ| DATA,ʬˇDATA,lˈ DATAlˬ,ˈ\DATAˬlˈDATA,ˬˈDATA,lˉ< DATAl̬,ˉ|'DATA̬lˉiDATA,̬ˊlDATA,lˊDATAlͬ,ˋ eDATAͬlˋDATA,ͬˋ)DATA,lˌ<DATAlά,ˌ DATAάlˌDATA,άˍDATA,lˍ\DATAlϬ,ˍDATAϬlˍDATA,Ϭˎ<DATA,lˎDATAlЬ,ˎ&DATAЬlˏ#DATA,Ьˏl'DATA,lˏ"DATAlѬ,ː !DATAѬlː\ DATA,ѬːDATA,lːDATAlҬ,ˑDATAҬlˑ\DATA,ҬˑDATA,lˑ DATAlӬ,˒DATAӬl˒LDATA,Ӭ˒DATA,l˒DATAlԬ,˓ DATAԬl˓\DATA,Ԭ˓DATA,l˓<DATAlլ,˔<<DATAլl˔9DATA,լ˕DATA,l˕lDATAl֬,˕!DATA֬l˕<DATA,֬˖\&DATA,l˖DATAl׬,˖DATA׬l˗,DATA,׬˗lDATA,l˗DATAlج,˗ DATAجl˘<DATA,ج˘lDATA,l˘IDATAl٬,˙,DATA٬l˙|DATA,٬˙ DATA,l˙(DATAlڬ,˚\DATAڬl˚DATA,ڬ˚DATA,l˛<DATAl۬,˛| DATA۬l˛DATA,۬˛ DATA,l˜,@DATAlܬ,˜DATAܬl˜DATA,ܬ˝,DATA,l˝\DATAlݬ,˝?DATAݬl˝DATA,ݬ˞<?DATA,l˞DATAlެ,˞DATAެl˟<DATA,ެ˟|DATA,l˟ DATAl߬,˟DATA߬lˠ, DATA,߬ˠ|DATA,lˠDATAl,ˠDATAlˡ< DATA,ˡ DATA,lˡ DATAl,ˢ DATAlˢLDATA,ˢ|DATA,lˢDATAl,ˣ DATAlˣ<DATA,ˣDATA,lˣDATAl,ˣDATAlˤ<DATA,ˤ|DATA,lˤDATAl,ˤDATAl˥,DATA,˥\DATA,l˥DATAl,˥DATAl˦DATA,˦lDATA,l˦DATAl,˦+DATAl˧<DATA,˧|DATA,l˧DATAl,˧DATAl˨L DATA,˨DATA,l˨*DATAl,˩DATAl˩\DATA,˩DATA,l˩ DATAl,˪, DATAl˪lDATA,˪%DATA,l˪DATAl,˫,DATAl˫lDATA,˫ DATA,l˫ DATAl,ˬ,DATAlˬ\DATA,ˬ'DATA,lˬ+DATAl,˭\DATAl˭ DATA,˭?DATA,lˮLDATAl,ˮDATAlˮDATA,˯ DATA,l˯LDATAl,˯DATAl˯DATA,˰DATA,l˰\DATAl,˰?DATAl˱ +DATA,˱l8DATA,l˱:DATAl,˲L*DATAl˲DATA,˲$DATA,l˳<DATAl,˳DATAl˳ DATA,˴ DATA,l˴\ DATAl,˴DATAl˴,DATA,˵,<DATA,l˵?DATAl,˶ ,DATAl˶lDATA,˶DATA,l˶DATAl,˷LDATAl˷ DATA,˷DATA,l˸ DATAl,˸\DATAl˸,DATA,˸0DATA,l˹L4DATAl,˹*DATAl˺ DATA,˺L$DATA,l˺DATAl,˺DATAl˻, DATA,˻lDATA,l˻ DATAl,˻DATAl˼,(DATA,˼DATA,l˼DATAl,˽DATAl˽\DATA,˽DATA,l˽ DATAl,˾,DATAl˾\DATA,˾7DATA,l˿ DATAl,˿LDATAl˿DATA,˿DATA,l DATAl,\DATAl"DATA,7DATA,l<*DATAl,DATAlDATA,<DATA,lŒ DATAl,DATAl2DATA,\=DATA,l>DATAl,<;DATAlĬCDATA,ADATA,lŌDATAl,BDATAl<;DATA,ƬADATA,lDATAl,l.DATAlDATA,DATA,l\DATAl,ȬDATAl DATA,,DATA,l\.DATAl,ɼ9DATAl,>DATA,ʜCDATA,l DATAl,L-DATAlˬDATA,DATA,l<DATAl,̌.DATAlDATA,,/DATA,l͌ DATAl,DATAl#DATA,LDATA,l| DATAl,μDATAl DATA,\DATA,lϜDATAl, DATAlDATA ,L DATA , lМDATA l  ,DATA   l.DATA  , |DATA , l ѬDATA l  ,DATA   l =DATA  , |9DATA , l >DATA l  ,\=DATA   lCDATA  , <DATA , l Ԍ5DATA l  ,DATA   l<DATA  , |(DATA , l MDATA l  ,\.DATA   lּDATA ,  DATA,l LDATAl,|-DATAlDATA,,DATA,l|DATAl,ؼDATAl DATA,LDATA,l|8DATAl,DATAl,8DATA,ڜDATA,l-DATAl,,-DATAlیDATA,DATA,l2DATAl,|)DATAl DATA,DATA,lL[DATAl,DATAl DATA,LDATA,l| DATAl,޼QDATAl<>DATA,߬<DATA,l4DATAl,|JDATAlKDATA,|!DATA,l5DATAl,,0DATAlDATA,:DATA,lL;DATAl,$DATAl DATA,LDATA,l DATAl,<DATAllDATA,DATA,lDATAl,,DATAll+DATA,DATA,lDATAl,lDATAlDATA,+DATA,l\DATAl,'DATAlDATA,LDATA,l)DATAl,DATAlL$DATA,DATA,lDATAl,,#DATAl|(DATA,(DATA,l<(DATAl,DATAl*DATA,L DATA,l=DATAl,DATAlL2DATA ,-DATA , l DATA l  ,<DATA   l DATA !,  DATA!,!l  DATA!l!!,<;DATA!!!lDATA!",!DATA","l!DATA"l"",\ DATA"""l<DATA"#," >DATA#,#l"|4DATA#l##,5DATA###l<0DATA#$,#KDATA$,$l#!DATA$l$$,lDATA$$$lDATA$%,$DATA%,%l$DATA%l%%,\DATA%%%lDATA%&,%DATA&,&l%<DATA&l&&,GDATA&&&lDATA&',&LDATA','l&*DATA'l'',DATA'''lLDATA'(,'|DATA(,(l' DATA(l((, DATA(((lLDATA(),(|6DATA),)l(DATA)l)), DATA)))l\!DATA)*,) DATA*,*l)DATA*l**,'DATA***llDATA*+,*!DATA+,+l*DATA+l++,L DATA+++lDATA+,,+DATA,,,l+DATA,l,,,LDDATA,,,lDATA,-,,DATA-,-l,LDATA-l--,%DATA---lDATA-.,-(DATA.,.l-|DATA.l.., DATA...l DATA./,.l%DATA/,/l. DATA/l//,DATA///l,PDATA/0,/DATA0,0l/DATA0l00,DATA000lLDATA01,0DATA1,1l0DATA1l11, DATA111l\DATA12,1,DATA2,2l1 DATA2l22,LDATA222l DATA23,2 DATA3,3l2DATA3l33,LQDATA333lDATA34,3DATA4,4l3<DATA4l44,lDATA444lDATA45,4DATA5,5l4,DATA5l55,|DATA555l,DATA56,5,DATA6,6l5lDATA6l66, DATA666l DATA67,6 <DATA7,7l6 l8DATA7l77, DATA777l ,8DATA78,7 DATA8,8l7 @DATA8l88, <DATA888l lDATA89,8 DATA9,9l8 ?DATA9l99, L DATA999l DATA9:,9 DATA:,:l9  DATA:l::, \ DATA:::l DATA:;,: DATA;,;l:4DATA;l;;,|DATA;;;lDATA;<,; DATA<,,=LDATA>,>l=4DATA>l>>,)DATA>>>lL_DATA>?,>YDATA?,?l>l)DATA?l??,_DATA???l\YDATA?@,?(DATA@,@l?LeDATA@l@@,_DATA@@@llDDATA@A,@iDATAA,Al@||DATAAlAA,,DATAAAAlDATAAB,A,*DATAB,BlADATABlBB,3DATABBBl<DATABC,B|'DATAC,ClBDATAClCC, $DATACCCl\$DATACD,CuDATAD,DlCLDATADlDD,DATADDDlDATADE,D DATAE,ElDLDATAElEE,DATAEEElDATAEF,ECDATAF,FlEl DATAFlFF,CDATAFFFl,DATAFG,F|*DATAG,GlFDATAGlGG, ,DATAGGGl |DATAGH,G!,LDATAH,HlG!DATAHlHH,!DATAHHHl"LDATAHI,H"5DATAI,IlH"5DATAIlII,#L7DATAIIIl#*DATAIJ,I$ .DATAJ,JlI$lZDATAJlJJ,$DATAJJJl%<DATAJK,J%DATAK,KlJ%mDATAKlKK,&lDATAKKKl&DATAKL,K&DATAL,LlK',DATALlLL,'lDATALLLl'DATALM,L'DATAM,MlL(,DATAMlMM,(lDATAMMMl(MDATAMN,M),DATAN,NlM)lDATANlNN,)DATANNNl)DATANO,N*,DATAO,OlN*lDATAOlOO,*DATAOOOl*DATAOP,O+,DATAP,PlO+lDATAPlPP,+DATAPPPl+DATAPQ,P,,DATAQ,QlP,l:DATAQlQQ,,SDATAQQQl-\DATAQR,Q-DATAR,RlQ-DATARlRR,.DATARRRl.\ DATARS,R."DATAS,SlR.DATASlSS,/,DATASSSl/\@DATAST,S/DATAT,TlS/ DATATlTT,0<DATATTTl0l?DATATU,T0 DATAU,UlT14DATAUlUU,1|4DATAUUUl1 DATAUV,U2,$DATAV,VlU2|DATAVlVV,2#DATAVVVl3 DATAVW,V3L DATAW,WlV3 DATAWlWW,3 DATAWWWl4 DATAWX,W4L DATAX,XlW4 DATAXlXX,4 DATAXXXl5 DATAXY,X5LDATAY,YlX5DATAYlYY,5DATAYYYl6DATAYZ,Y6lDATAZ,ZlY6]DATAZlZZ,7<DATAZZZl7DDATAZ[,Z7DATA[,[lZ8<DATA[l[[,8 DATA[[[l8 DATA[\,[9 DATA\,\l[9L DATA\l\\,9@DATA\\\l9DATA\],\:,DATA],]l\:lDATA]l]],:?DATA]]]l; DATA]^,];LDATA^,^l]; DATA^l^^,;DATA^^^l;DATA^_,^<<DATA_,_l^<|-DATA_l__,<DATA___l=,DATA_`,_=lDATA`,`l_=DATA`l``,=DATA```l>,DATA`a,`>lDATAa,al`>DATAalaa,>DATAaaal?<DATAab,a?DATAb,bla?DATAblbb,@DATAbbbl@\DATAbc,b@DATAc,clb@DATAclcc,A,$DATAccclA|$DATAcd,cA-DATAd,dlcB, DATAdldd,BlDATAdddlB&DATAde,dC DATAe,eldCLDATAelee,CDATAeeelCDATAef,eD @DATAf,fleD|DATAflff,DDATAffflDDATAfg,fE?DATAg,glfEDATAglgg,EDATAggglF8DATAgh,gFDATAh,hlgFDATAhlhh,G DATAhhhlGL%DATAhi,hG!DATAi,ilhGDATAilii,H,DATAiiilH|!DATAij,iHDATAj,jliI DATAjljj,ILDATAjjjlIDATAjk,jIDATAk,kljJ,DATAklkk,JlDATAkkklJ%DATAkl,kJDATAl,llkK<DATAllll,K|DATAllllK7DATAlm,lLDATAm,mllL\DATAmlmm,LDATAmmmlL DATAmn,mM<UDATAn,nlmMDATAnlnn,N >DATAnnnlN|DATAno,nNDATAo,olnO 'DATAoloo,O\'DATAooolO'DATAop,oO'DATAp,ploPL DATAplpp,PDATAppplPDATApq,pQDATAq,qlpQl+DATAqlqq,Q+DATAqqqlR,+DATAqr,qR DATAr,rlqRDATArlrr,SDATArrrlSl+DATArs,rS+DATAs,slrT,+DATAslss,T DATAssslTDATAst,sUGDATAt,tlsUDATAtltt,UDATAtttlV DATAtu,tVlDATAu,ultVDATAuluu,W DATAuuulW\DATAuv,uW"DATAv,vluW8DATAvlvv,X\XDATAvvvlXDATAvw,vY,DATAw,wlvYlDATAwlww,Y7DATAwwwlZ DATAwx,wZ<)DATAx,xlwZ+DATAxlxx,Z DATAxxxl[< DATAxy,x[|DATAy,ylx[DATAylyy,[DATAyyyl\<DATAyz,y\HDATAz,zly] DATAzlzz,]\GDATAzzzl]DATAz{,z^ DATA{,{lz^\6DATA{l{{,^*DATA{{{l_>DATA{|,{_RDATA|,|l{` DATA|l||,`\DATA|||l`DATA|},|`DATA},}l|a !DATA}l}},a\DATA}}}la%DATA}~,}a-DATA~,~l}b< DATA~l~~,b|#DATA~~~lbDATA~,~c#DATA,l~cl*DATAl,cDATAld DATAǀ,d\DATAǀ,ǀldgDATAǀlǀǀ,e<?DATAǀǀǀleTDATAǀǁ,ǀf,2DATAǁ,ǁlǀfDATAǁlǁǁ,f6DATAǁǁǁlg,/DATAǁǂ,ǁgODATAǂ,ǂlǁh DATAǂlǂǂ,h\#DATAǂǂǂlh DATAǂǃ,ǂhDATAǃ,ǃlǂi,*DATAǃlǃǃ,iDATAǃǃǃli,DATAǃDŽ,ǃj,DATADŽ,DŽlǃj\+DATADŽlDŽDŽ,jDATADŽDŽDŽljDATADŽDž,DŽk,DATADž,DžlDŽklDATADžlDžDž,k DATADžDžDžlkDATADždž,Džl @DATAdž,džlDžl|DATAdžldždž,lDATAdždždžllDATAdžLJ,džm?DATALJ,LJldžmDATALJlLJLJ,mDATALJLJLJln DATALJLj,LJnLDATALj,LjlLJnDATALjlLjLj,n DATALjLjLjlo DATALjlj,LjoLDATAlj,ljlLjo|DATAljlljlj,oDATAljljljlo DATAljNJ,ljp< DATANJ,NJlljp|)DATANJlNJNJ,pDATANJNJNJlqDATANJNj,NJq\DATANj,NjlNJqDATANjlNjNj,qDATANjNjNjlr,DATANjnj,Njrl!DATAnj,njlNjrGDATAnjlnjnj,s,.DATAnjnjnjlsaDATAnjǍ,njtDATAǍ,ǍlnjtlDATAǍlǍǍ,t DATAǍǍǍltDATAǍǎ,ǍuLDATAǎ,ǎlǍuDATAǎlǎǎ,uDATAǎǎǎlvDATAǎǏ,ǎvlDATAǏ,Ǐlǎv'DATAǏlǏǏ,v'DATAǏǏǏlwL'DATAǏǐ,Ǐw'DATAǐ,ǐlǏw DATAǐlǐǐ,x,DATAǐǐǐlx|DATAǐǑ,ǐx'DATAǑ,Ǒlǐy 'DATAǑlǑǑ,y\'DATAǑǑǑly'DATAǑǒ,Ǒy DATAǒ,ǒlǑz<DATAǒlǒǒ,z|DATAǒǒǒlzDATAǒǓ,ǒ{+DATAǓ,Ǔlǒ{|+DATAǓlǓǓ,{+DATAǓǓǓl|< DATAǓǔ,Ǔ||DATAǔ,ǔlǓ|DATAǔlǔǔ,}+DATAǔǔǔl}|+DATAǔǕ,ǔ}+DATAǕ,Ǖlǔ~< DATAǕlǕǕ,~|DATAǕǕǕl~DATAǕǖ,Ǖ~$DATAǖ,ǖlǕL(DATAǖlǖǖ,DATAǖǖǖl6DATAǖǗ,ǖ̀L6DATAǗ,Ǘlǖ̀ DATAǗlǗǗ,̀DATAǗǗǗĺ, DATAǗǘ,Ǘ́lDATAǘ,ǘlǗ́ DATAǘlǘǘ,́DATAǘǘǘl̂LDATAǘǙ,ǘ̂8DATAǙ,Ǚlǘ̂DATAǙlǙǙ,̃<3DATAǙǙǙl̃5DATAǙǚ,Ǚ̃=DATAǚ,ǚlǙ̄l;DATAǚlǚǚ,̄ DATAǚǚǚl̅DATAǚǛ,ǚ̅\ DATAǛ,Ǜlǚ̅DATAǛlǛǛ,̅DATAǛǛǛl̆ !DATAǛǜ,Ǜ̆\DATAǜ,ǜlǛ̆DATAǜlǜǜ,̆<DATAǜǜǜl̇L;DATAǜǝ,ǜ̇ DATAǝ,ǝlǜ̈ !DATAǝlǝǝ,̈\3DATAǝǝǝl̈%DATAǝǞ,ǝ̉ DATAǞ,Ǟlǝ̉L4DATAǞlǞǞ,̉DATAǞǞǞl̉DATAǞǟ,Ǟ̊DATAǟ,ǟlǞ̊\DATAǟlǟǟ,̊DATAǟǟǟl̊5DATAǟǠ,ǟ̋<DATAǠ,Ǡlǟ̋l"DATAǠlǠǠ,̋=DATAǠǠǠľ,ADATAǠǡ,Ǡ̌DATAǡ,ǡlǠ̌DATAǡlǡǡ,̍,DATAǡǡǡl̍l DATAǡǢ,ǡ̍DATAǢ,Ǣlǡ̍DATAǢlǢǢ,̎ DATAǢǢǢl̎\/DATAǢǣ,Ǣ̎ DATAǣ,ǣlǢ̎DATAǣlǣǣ,̏,DATAǣǣǣl̏|DATAǣǤ,ǣ̏DATAǤ,Ǥlǣ̐ DATAǤlǤǤ,̐\DATAǤǤǤl̐ DATAǤǥ,Ǥ̐#DATAǥ,ǥlǤ̑,-DATAǥlǥǥ,̑DATAǥǥǥl̑6DATAǥǦ,ǥ̒,DATAǦ,Ǧlǥ̒|DATAǦlǦǦ,̒ DATAǦǦǦl̒DATAǦǧ,Ǧ̓,DATAǧ,ǧlǦ̓|=DATAǧlǧǧ,̓ DATAǧǧǧl̔,DATAǧǨ,ǧ̔\DATAǨ,Ǩlǧ̔DATAǨlǨǨ,̔#DATAǨǨǨl̕<DATAǨǩ,Ǩ̕|DATAǩ,ǩlǨ̕DATAǩlǩǩ,̖DATAǩǩǩl̖\DATAǩǪ,ǩ̖DATAǪ,Ǫlǩ̖DATAǪlǪǪ,̗DATAǪǪǪl̗l(DATAǪǫ,Ǫ̗ DATAǫ,ǫlǪ̘ DATAǫlǫǫ,̘<DATAǫǫǫl̘DATAǫǬ,ǫ̘ DATAǬ,Ǭlǫ̙ DATAǬlǬǬ,̙\DATAǬǬǬl̙DATAǬǭ,Ǭ̙DATAǭ,ǭlǬ̚DATAǭlǭǭ,̚LDATAǭǭǭl̚DATAǭǮ,ǭ̚DATAǮ,Ǯlǭ̛DATAǮlǮǮ,̛lDATAǮǮǮl̛DATAǮǯ,Ǯ̛%DATAǯ,ǯlǮ̜,,DATAǯlǯǯ,̜!DATAǯǯǯl̜ DATAǯǰ,ǯ̝#DATAǰ,ǰlǯ̝lDATAǰlǰǰ,̝#DATAǰǰǰl̞ DATAǰDZ,ǰ̞<%DATADZ,DZlǰ̞DATADZlDZDZ,̞DATADZDZDZl̟DATADZDz,DZ̟\(DATADz,DzlDZ̟!DATADzlDzDz,̠ DATADzDzDzl̠LDATADzdz,Dz̠$DATAdz,dzlDz̠DATAdzldzdz,̡,KDATAdzdzdzl̡DATAdzǴ,dz̡DATAǴ,Ǵldz̢, DATAǴlǴǴ,̢lDATAǴǴǴl̢-DATAǴǵ,Ǵ̣ @DATAǵ,ǵlǴ̣|DATAǵlǵǵ,̣DATAǵǵǵl̤8DATAǵǶ,ǵ̤DATAǶ,Ƕlǵ̤ DATAǶlǶǶ,̥DATAǶǶǶl̥\,DATAǶǷ,Ƕ̥DATAǷ,ǷlǶ̥+DATAǷlǷǷ,̦LDATAǷǷǷl̦+DATAǷǸ,Ƿ̦%DATAǸ,ǸlǷ̧<DATAǸlǸǸ,̧l(DATAǸǸǸļ2DATAǸǹ,Ǹ̨,6DATAǹ,ǹlǸ̨DATAǹlǹǹ,̨&DATAǹǹǹl̩DATAǹǺ,ǹ̩lDATAǺ,Ǻlǹ̩DATAǺlǺǺ,̩DATAǺǺǺl̪,DATAǺǻ,Ǻ̪\ DATAǻ,ǻlǺ̪DATAǻlǻǻ,̪ADATAǻǻǻl̫<DATAǻǼ,ǻ̫lDATAǼ,Ǽlǻ̫DATAǼlǼǼ,̫BDATAǼǼǼl̬LDATAǼǽ,Ǽ̬DATAǽ,ǽlǼ̬DATAǽlǽǽ,̭ DATAǽǽǽḽLDATAǽǾ,ǽ̭DATAǾ,Ǿlǽ̭DATAǾlǾǾ,̮ DATAǾǾǾl̮LDATAǾǿ,Ǿ̮DATAǿ,ǿlǾ̮DATAǿlǿǿ,̯ DATAǿǿǿl̯LDATAǿ,ǿ̯DATA,lǿ̯DATAl,̰ DATAl̰LDATA,̰ DATA,l̰ DATAl,̱ DATAḻL DATA,̱DATA,ḻDATAl¬,̲ DATA¬l̲LDATA,¬̲DATA,l̲DATAlì,̳ DATAìl̳L DATA,ì̳ DATA,l̳DATAlĬ,̴ DATAĬl̴LDATA,Ĭ̴DATA,l̴DATAlŬ,̵ DATAŬl̵LDATA,Ŭ̵DATA,l̵DATAlƬ,̶ DATAƬl̶LDATA,Ƭ̶DATA,l̶DATAlǬ,̷ DATAǬl̷LDATA,Ǭ̷DATA,l̷DATAlȬ,̸ DATAȬl̸LDATA,Ȭ̸DATA,l̸DATAlɬ,̹ DATAɬl̹LDATA,ɬ̹|?DATA,l̹DATAlʬ,̺ DATAʬl̺\DATA,ʬ̺?DATA,l̺DATAlˬ,̻<DATAˬl̻l?DATA,ˬ̻DATA,l̼ DATAl̬,̼LDATA̬l̼|?DATA,̬̼ DATA,l̽,DATAlͬ,̽lDATAͬl̽ DATA,ͬ̽DATA,l̾,DATAlά,̾|DATAάl̾DATA,ά̾?DATA,l̿\DATAlϬ,̿DATAϬl̿DATA,Ϭ̿?DATA,ll DATAlЬ,DATAЬl8DATA,Ь\6DATA,l5DATAlѬ,DATAѬl\2DATA,Ѭ¼DATA,lDATAlҬ,LDATAҬlÌDATA,ҬDATA,l DATAlӬ,LDATAӬlĜ<DATA,Ӭ DATA,lL,DATAlԬ,ŬDATAԬl9DATA,Ԭl?DATA,l*DATAlլ,<DATAլlnj7DATA,լ!DATA,l<>DATAl֬,ȬDATA֬lADATA,֬\DATA,lɌDATAl׬,!DATA׬l@DATA,׬ʌ@DATA,lDATAlج,LDATAجlˌDATA,جADATA,lLDATAl٬,̌DATA٬l DATA,٬ DATA,lL DATAlڬ,͌DATAڬlDATA,ڬ DATA,lLDATAl۬,ΜDATA۬lDATA,۬,DATA,l\ DATAlܬ,Ϝ;DATAܬl 0DATA,ܬlNDATA,lDATAlݬ,,@DATAݬlќODATA,ݬ$DATA,llDATAlެ,Ҝ0DATAެlQDATA,ެ|DATA,lӼ)DATAl߬,DATA߬l\DATA,߬ԜDATA,lDATAl,<DATAlՌDATA,DATA,l,DATAl,|DATAlּ DATA,DATA,lLDATAl,׌DATAlDATA, DATA,l\$DATAl,جMDATAl, DATA,l DATA,l٬KDATAl,,DATAl\DATA,ڬ DATA,l5DATAl,LDATAlۜ2DATA,DATA,lLDATAl,܌DATAlDATA, :DATA,l|5DATAl,DATAl,$DATA,|+DATA,lDATAl,DATAl\DATA,ߜDATA,lDATAl,DATAl\$DATA, DATA,l DATAl,,DATAllDATA,DATA,lDATAl,DATAl\*DATA,0DATA,l,DATAl,|DATAlDATA,DATA,l $DATAl,\+DATAl+DATA,'DATA,ll+DATAl,+DATAl,DATA,|+DATA,l+DATAl,<DATAl|!DATA,DATA,l"DATAl,L&DATAlDATA,DATA,l,DATAl,|DATAlDATA, DATA,lL:DATAl,<DATAl,/DATA,DATA,lDATAl,*DATAl\1DATA,?DATA,l,DATAl,\DATAlADATA, PDATA,l@DATAl,QDATAl|CDATA,DATA,l$DATAl,lIDATAl7DATA,LDATA,lDATAl, DATAl,;DATA,(DATA,l(DATAl,\)DATAlDATA, DATA,l,DATAl,|DATAl DATA, DATA,l<DATAl,|DATAlDATA, DATA,lL*DATAl,,DATAl DATA,LDATA,lDATAl,DATAl<DATA,6DATA,lDATAl,,DATAllDATA,DATA,l DATAl,0DATAl|(DATA,DATA,l,DATAl,\DATAl@DATA,DATA,l,DATAl,lDATAl?DATA, DATA,lLDATAl, DATAlDATA,"DATA,ll DATAl, DATAlDATA,<DATA,lDATAl,DATAl,DATA,|DATA,lDATAl,DATAllDATA,DATA,l DATAl,\DATAlDATA,#DATA,lLDATAl,DATAlDATA, DATA,l\DATAl,DATAl DATA,<DATA,lDATAl,4DATAl<DATA ,DATA , l DATA l  , DATA   l\"DATA  , 7DATA , l  6DATA l  ,lDATA   lDATA  , &DATA , l  L DATA l  , *DATA   l 7DATA  ,  L6DATA , l  DATA l  , DATA   l LDATA  ,  DATA , l  DATA l  , DATA   l LDATA ,  DATA,l  DATAl,  DATAl \DATA, 5DATA,l 8DATAl,|>DATAl=DATA,\1DATA,l.DATAl,DATAlLDATA, DATA,lDATAl, DATAl\DATA, DATA,lDATAl,, DATAll"DATA,=DATA,l,DATAl,|DATAlDATA,DATA,l\ DATAl,DATAl!DATA,,DATA,l| DATAl,$DATAl 3DATA,lDATA,lDATAl, DATAl\DATA,DATA,lDATAl, DATAl\DATA,+DATA,lDATAl,LDATAlDATA, DATA,lDATAl,LADATAlDATA, DATA,lL DATAl,DATAlBDATA,<DATA,l|<DATAl,(DATAlL(DATA,)DATA,l DATAl,<ADATAlDATA, DATA,l< DATAl,|DATAlBDATA, ,(DATA,l $DATAl, DATAl!DATA,!\DATA,l! DATAl,! DATAl"< DATA ,""DATA , l" DATA l  ,#, DATA   l#|LDATA !, #DATA!,!l $,ADATA!l!!,$DATA!!!l$ DATA!",!%, DATA","l!%lDATA"l"",%CDATA"""l&#DATA"#,"&lDATA#,#l"&#DATA#l##,&DATA###l'LDATA#$,#'#DATA$,$l#'DATA$l$$,(,DATA$$$l(l-DATA$%,$(-DATA%,%l$), DATA%l%%,)lPDATA%%%l)DATA%&,%*DATA&,&l%*\ DATA&l&&,*DATA&&&l*PDATA&',&+lDATA','l&+DATA'l'',+DATA'''l,,DATA'(,',lDATA(,(l',DATA(l((,,DATA(((l-,DATA(),(-lGDATA),)l(-DATA)l)),. DATA)))l.\DATA)*,).ADATA*,*l).DATA*l**,/L DATA***l/ DATA*+,*/DATA+,+l*0 BDATA+l++,0|DATA+++l0EDATA+,,+1, DATA,,,l+1lDATA,l,,,1ADATA,,,l2 DATA,-,,2L DATA-,-l,2 DATA-l--,2DATA---l3 BDATA-.,-3|DATA.,.l-3 DATA.l..,4 DATA...l4LDATA./,.4DATA/,/l.4DATA/l//,5DATA///l5l2DATA/0,/55DATA0,0l/6,DATA0l00,6lDATA000l6DATA01,062DATA1,1l07L6DATA1l11,7DATA111l7DATA12,18DATA2,2l18LADATA2l22,8DATA222l8 DATA23,29< DATA3,3l29|DATA3l33,9BDATA333l:,DATA34,3:| DATA4,4l3:RDATA4l44,;<DATA444l;|DATA45,4;DATA5,5l4< (DATA5l55,, DATA7,7l6>lDATA7l77,>BDATA777l?&DATA78,7?l'DATA8,8l7?/DATA8l88,@DATA888l@LDATA89,8@DATA9,9l8@ DATA9l99,@ DATA999lA<DATA9:,9AlDATA:,:l9A&DATA:l::,ADATA:::lBL DATA:;,:B DATA;,;l:BDATA;l;;,C,DATA;;;lC\ DATA;<,;CDATA<,,=EDATA>,>l=E4DATA>l>>,FL*DATA>>>lFDATA>?,>F6DATA?,?l>GLDATA?l??,GDATA???lGDATA?@,?H DATA@,@l?HLDATA@l@@,H DATA@@@lH*DATA@A,@I,DATAA,Al@I\DATAAlAA,I'DATAAAAlIDATAAB,AJ,DATAB,BlAJl,DATABlBB,JDATABBBlK 7DATABC,BKl!DATAC,ClBKDATAClCC,K"DATACCClL<DATACD,CL|DATAD,DlCLDATADlDD,LDATADDDlML.DATADE,DMMDATAE,ElDN,DATAElEE,NlDATAEEElNDATAEF,ENDATAF,FlEO,DATAFlFF,OlDATAFFFlO DATAFG,FODATAG,GlFP,GDATAGlGG,P9DATAGGGlQ 2DATAGH,GQlDATAH,HlGQ DATAHlHH,Q&DATAHHHlRLADATAHI,HR%DATAI,IlHS DATAIlII,S\DATAIIIlSDATAIJ,ISDATAJ,JlITDATAJlJJ,TLDATAJJJlTDATAJK,JTDATAK,KlJU8DATAKlKK,U%DATAKKKlU)DATAKL,KV<DATAL,LlKVDATALlLL,V DATALLLlW DATALM,LW\DATAM,MlLW3DATAMlMM,W>DATAMMMlXlDATAMN,MX>DATAN,NlMY!DATANlNN,Yl*DATANNNlYDATANO,NZ PDATAO,OlNZvDATAOlOO,[,DATAOOOl[l^DATAOP,O[BDATAP,PlO\lHDATAPlPP,\.DATAPPPl]LDATAPQ,P]NDATAQ,QlP^ DATAQlQQ,^L"DATAQQQl^EDATAQR,Q_ DATAR,RlQ_\DATARlRR,_DATARRRl_DATARS,R` DATAS,SlR`LDATASlSS,`DATASSSl`DATAST,Sa, DATAT,TlSal"DATATlTT,a"DATATTTlb DATATU,Tb<DATAU,UlTbDATAUlUU,bDATAUUUlcDATAUV,UcLDATAV,VlUcDATAVlVV,c0DATAVVVld,DATAVW,Vdl DATAW,WlVdQDATAWlWW,e,DATAWWWle|eDATAWX,Wf ,DATAX,XlWfl DATAXlXX,fDATAXXXlfDATAXY,XgL?DATAY,YlXgODATAYlYY,h< DATAYYYlh| DATAYZ,Yh DATAZ,ZlYhDATAZlZZ,i,DATAZZZlilDATAZ[,Zi DATA[,[lZiKDATA[l[[,j\DATA[[[ljDATA[\,[jDATA\,\l[kDATA\l\\,k\DATA\\\lkDATA\],\kDATA],]l\lIDATA]l]],lDATA]]]ll*DATA]^,]m,DATA^,^l]ml#DATA^l^^,mDATA^^^lmDATA^_,^nL%DATA_,_l^nDATA_l__,nSDATA___lo\DATA_`,_o DATA`,`l_oDATA`l``,p ADATA```lp|DATA`a,`p DATAa,al`q DATAalaa,qLDATAaaalqBDATAab,aqDATAb,blarLCDATAblbb,r9DATAbbbls,1DATAbc,bs%DATAc,clbsDATAclcc,tDATAcccltLDATAcd,ctDATAd,dlctDATAdldd,t&DATAdddluLDATAde,duDATAe,eldu DATAelee,v,DATAeeelvl'DATAef,evDATAf,flevDATAflff,w<,DATAffflwDATAfg,fwDATAg,glfx!DATAglgg,xlDATAggglxDATAgh,gy DATAh,hlgy<DATAhlhh,yl7DATAhhhly"DATAhi,hzDATAi,ilhz\0DATAilii,zeDATAiiil{LDATAij,i{DATAj,jli{ DATAjljj,|DATAjjjl|lDATAjk,j|DATAk,klj|DATAklkk,}<DATAkkkl} DATAkl,k}*DATAl,llk~,DATAllll,~l@DATAllll~DATAlm,l,DATAm,mll\'DATAmlmm,!DATAmmmlDATAmn,m̀<DATAn,nlm̀DATAnlnn,̀DATAnnnĺ DATAno,ńLDATAo,olń| DATAoloo,́DATAoool͂ DATAop,o͂\DATAp,plo͂ DATAplpp,͂DATApppl̓DATApq,p̓LjDATAq,qlp̓DATAqlqq,̈́<DATAqqql̈́DATAqr,q̈́3DATAr,rlqͅ,DATArlrr,ͅ|DATArrrlͅDATArs,rͅDATAs,slr͆6DATAslss,͆|DATAsssl͆DATAst,s͆6DATAt,tls͇L#DATAtltt,͇"DATAtttl͇.DATAtu,t͈L.DATAu,ult͈DATAuluu,͈DATAuuul͉,DATAuv,u͉| DATAv,vlu͉DATAvlvv,͊DATAvvvl͊\DATAvw,v͊DATAw,wlv͊%DATAwlww,͋,;DATAwwwl͋DATAwx,w͋DATAx,xlw͌DATAxlxx,͌\DATAxxxl͌DATAxy,x͌DATAy,ylx͍ DATAylyy,͍\DATAyyyl͍DATAyz,y͍fDATAz,zly͎lDATAzlzz,͎DATAzzzl͎DATAz{,z͏DATA{,{lz͏lDATA{l{{,͏2DATA{{{l͐ DATA{|,{͐LDATA|,|l{͐|DATA|l||,͐DATA|||l͑ DATA|},|͑< DATA},}l|͑DATA}l}},͑DATA}}}l͒,>DATA}~,}͒>DATA~,~l}͓ CDATA~l~~,͓|CDATA~~~l͓9DATA~,~͔\DATA,l~͔DATAl,͔DATAl͔DATAȀ,͕<DATAȀ,Ȁl͕| DATAȀlȀȀ,͕ DATAȀȀȀl͖*DATAȀȁ,Ȁ͖|DATAȁ,ȁlȀ͖$DATAȁlȁȁ,͗ DATAȁȁȁl͗<DATAȁȂ,ȁ͗|0DATAȂ,Ȃlȁ͗ODATAȂlȂȂ,͘\DATAȂȂȂl͘DATAȂȃ,Ȃ͘DATAȃ,ȃlȂ͙ DATAȃlȃȃ,͙LDATAȃȃȃl͙|DATAȃȄ,ȃ͙DATAȄ,Ȅlȃ͙DATAȄlȄȄ,͚L5DATAȄȄȄl͚5DATAȄȅ,Ȅ͛ 5DATAȅ,ȅlȄ͛lDATAȅlȅȅ,͛DATAȅȅȅl͛DATAȅȆ,ȅ͜LDATAȆ,Ȇlȅ͜DATAȆlȆȆ,͜DATAȆȆȆl͝DATAȆȇ,Ȇ͝LDATAȇ,ȇlȆ͝ DATAȇlȇȇ,͝DATAȇȇȇl͞DATAȇȈ,ȇ͞\ADATAȈ,Ȉlȇ͞DATAȈlȈȈ,͟ DATAȈȈȈl͟L5DATAȈȉ,Ȉ͟DATAȉ,ȉlȈ͟5DATAȉlȉȉ,͠\ DATAȉȉȉl͠DATAȉȊ,ȉ͠DATAȊ,Ȋlȉ͡,DATAȊlȊȊ,͡l8DATAȊȊȊl͡%DATAȊȋ,Ȋ͢,DATAȋ,ȋlȊ͢lDATAȋlȋȋ,͢DATAȋȋȋl͢DATAȋȌ,ȋͣDATAȌ,Ȍlȋͣ\DATAȌlȌȌ,ͣ+DATAȌȌȌlͣ6DATAȌȍ,ȌͤLDATAȍ,ȍlȌͤ6DATAȍlȍȍ,ͤ,DATAȍȍȍlͥLDATAȍȎ,ȍͥDATAȎ,ȎlȍͥDATAȎlȎȎ,ͦ#DATAȎȎȎlͦlDATAȎȏ,Ȏͦ3DATAȏ,ȏlȎͧ DATAȏlȏȏ,ͧ\#DATAȏȏȏlͧBDATAȏȐ,ȏͨ&DATAȐ,ȐlȏͨlDATAȐlȐȐ,ͨ'DATAȐȐȐlͨDATAȐȑ,Ȑͩ,DATAȑ,ȑlȐͩlDATAȑlȑȑ,ͩDATAȑȑȑlͩ+DATAȑȒ,ȑͪ\+DATAȒ,Ȓlȑͪ+DATAȒlȒȒ,ͫ#DATAȒȒȒlͫl DATAȒȓ,Ȓͫ DATAȓ,ȓlȒͫDATAȓlȓȓ,ͬ<4DATAȓȓȓlͬ4DATAȓȔ,ȓͬ4DATAȔ,Ȕlȓͭ\DATAȔlȔȔ,ͭDATAȔȔȔlͭDATAȔȕ,Ȕͮ,DATAȕ,ȕlȔͮ\4DATAȕlȕȕ,ͮDATAȕȕȕlͮDATAȕȖ,ȕͯ,DATAȖ,ȖlȕͯlDATAȖlȖȖ,ͯDATAȖȖȖlͯDATAȖȗ,ȖͰ,DATAȗ,ȗlȖͰl$DATAȗlȗȗ,ͰDATAȗȗȗlͱ DATAȗȘ,ȗͱLDATAȘ,Șlȗͱ|DATAȘlȘȘ,ͱDATAȘȘȘlͲ DATAȘș,ȘͲl$DATAș,șlȘͲDATAșlșș,ͳ DATAșșșlͳ\:DATAșȚ,șͳDATAȚ,Țlșʹ2DATAȚlȚȚ,ʹ| DATAȚȚȚlʹDATAȚț,Ț͵ DATAț,țlȚ͵\.DATAțlțț,͵7DATAțțțlͶDATAțȜ,țͶL%DATAȜ,ȜlțͶ5DATAȜlȜȜ,ͶBDATAȜȜȜlͷlDATAȜȝ,ȜͷVDATAȝ,ȝlȜ͸<DATAȝlȝȝ,͸DATAȝȝȝl͸UDATAȝȞ,ȝ͹\@DATAȞ,Ȟlȝ͹DATAȞlȞȞ,ͺ DATAȞȞȞlͺ\DATAȞȟ,ȞͺDATAȟ,ȟlȞͺDATAȟlȟȟ,ͻLDATAȟȟȟlͻ DATAȟȠ,ȟͻDATAȠ,Ƞlȟͼ,DATAȠlȠȠ,ͼ|DATAȠȠȠlͼ DATAȠȡ,Ƞͽ DATAȡ,ȡlȠͽ\DATAȡlȡȡ,ͽJDATAȡȡȡl;LDATAȡȢ,ȡ;LDATAȢ,ȢlȡͿDATAȢlȢȢ,ͿlZDATAȢȢȢlͿDATAȢȣ,ȢL:DATAȣ,ȣlȢ-DATAȣlȣȣ,7DATAȣȣȣl|*DATAȣȤ,ȣ DATAȤ,Ȥlȣ,DATAȤlȤȤ,\DATAȤȤȤlœ DATAȤȥ,Ȥ%DATAȥ,ȥlȤ,$DATAȥlȥȥ,|DATAȥȥȥlìDATAȥȦ,ȥ_DATAȦ,Ȧlȥ|DATAȦlȦȦ,DATAȦȦȦl>DATAȦȧ,Ȧl-DATAȧ,ȧlȦDATAȧlȧȧ,DATAȧȧȧl<DATAȧȨ,ȧƌBDATAȨ,Ȩlȧ,DATAȨlȨȨ,\DATAȨȨȨlǜDATAȨȩ,Ȩ:DATAȩ,ȩlȨLHDATAȩlȩȩ,DATAȩȩȩl%DATAȩȪ,ȩlDATAȪ,ȪlȩɼDATAȪlȪȪ, %DATAȪȪȪl\DATAȪȫ,ȪʬADATAȫ,ȫlȪ DATAȫlȫȫ,l DATAȫȫȫl˼DATAȫȬ,ȫ EDATAȬ,Ȭlȫ|GDATAȬlȬȬ,DATAȬȬȬl,DATAȬȭ,Ȭ|DATAȭ,ȭlȬBDATAȭlȭȭ,<BDATAȭȭȭlάMDATAȭȮ,ȭ,DATAȮ,Ȯlȭ|MDATAȮlȮȮ,DATAȮȮȮlL@DATAȮȯ,Ȯм2DATAȯ,ȯlȮgDATAȯlȯȯ,ѬhDATAȯȯȯlLDATAȯȰ,ȯҌLDATAȰ,Ȱlȯ DATAȰlȰȰ,\[DATAȰȰȰldDATAȰȱ,Ȱ|DATAȱ,ȱlȰԬDATAȱlȱȱ,DATAȱȱȱl<DATAȱȲ,ȱՌ DATAȲ,ȲlȱDATAȲlȲȲ, 0DATAȲȲȲllDATAȲȳ,Ȳ֬9DATAȳ,ȳlȲDATAȳlȳȳ,\DATAȳȳȳl׬9DATAȳȴ,ȳDATAȴ,ȴlȳlRDATAȴlȴȴ,DATAȴȴȴl<DATAȴȵ,ȴٌDATAȵ,ȵlȴDATAȵlȵȵ, DATAȵȵȵl\9DATAȵȶ,ȵ_DATAȶ,ȶlȵ\DATAȶlȶȶ,۬&DATAȶȶȶlDATAȶȷ,ȶLDATAȷ,ȷlȶܜDATAȷlȷȷ,DATAȷȷȷl,#DATAȷȸ,ȷ|DATAȸ,ȸlȷݼDATAȸlȸȸ, DATAȸȸȸl\DATAȸȹ,ȸޜDATAȹ,ȹlȸ:DATAȹlȹȹ,\!DATAȹȹȹl߬&DATAȹȺ,ȹDATAȺ,ȺlȹLDATAȺlȺȺ, DATAȺȺȺlDATAȺȻ,Ⱥ:DATAȻ,ȻlȺDATAȻlȻȻ,SDATAȻȻȻl\DATAȻȼ,Ȼ/DATAȼ,ȼlȻ DATAȼlȼȼ,L:DATAȼȼȼlbDATAȼȽ,ȼLDATAȽ,Ƚlȼ/DATAȽlȽȽ,DATAȽȽȽlLDATAȽȾ,Ƚ#DATAȾ,ȾlȽDATAȾlȾȾ,, DATAȾȾȾllDATAȾȿ,Ⱦ3DATAȿ,ȿlȾDATAȿlȿȿ,\DATAȿȿȿlDATAȿ,ȿDATA,lȿ,0DATAl,DATAlDATA, DATA,lL\DATAl,DATAl,DATA,\DATA,lDATAl¬,?DATA¬lLDATA,¬|DATA,lDATAlì, DATAìlL DATA,ìDATA,lBDATAlĬ,<DATAĬl|)DATA,Ĭ,DATA,l<DATAlŬ,|DATAŬlDATA,ŬDATA,l\"DATAlƬ,DATAƬlDATA,Ƭ, DATA,llDATAlǬ,DATAǬl DATA,ǬDATA,l\DATAlȬ,DATAȬl DATA,Ȭ<!DATA,lDATAlɬ,DATAɬl 'DATA,ɬ\DATA,lDATAlʬ,)DATAʬl,DATA,ʬ\DATA,lDATAlˬ,DATAˬl,DATA,ˬlDATA,l DATAl̬,DATA̬l,(DATA,̬(DATA,l(DATAlͬ,L(DATAͬl DATA,ͬDATA,l,DATAlά,|DATAάlDATA,ά DATA,l\ DATAlϬ,DATAϬlDATA,Ϭ<DATA,l| DATAlЬ, DATAЬl DATA,Ь<DATA,l|'DATAlѬ,DATAѬl DATA,Ѭ<DATA,l|'DATAlҬ,DATAҬlDATA,ҬLDATA,lDATAlӬ,DATAӬl DATA,ӬL DATA,lDATAlԬ,(DATAԬl,(DATA,Ԭ(DATA,l(DATAlլ,L DATAլlDATA,լDATA,lDATAl֬,lDATA֬l DATA,֬ DATA,l<DATAl׬,DATA׬lDATA,׬ DATA,ll DATAlج,DATAجlDATA,ج,DATA,ll"DATAl٬,1DATA٬lDATA,٬\DATA,lDATAlڬ,DATAڬl,DATA,ڬ|DATA,lDATAl۬, DATA۬lLDATA,۬DATA,lDATAlܬ,DATAܬl\DATA,ܬDATA,l DATAlݬ, <DATAݬl |DATA,ݬ DATA,l DATAlެ, \DATAެl DATA,ެ DATA,l <DATAl߬, |DATA߬l DATA,߬ DATA,l L^DATAl, DATAl DATA, L>DATA,l DATAl, DATAl,%DATA,|DATA,l%DATAl, DATAl\DATA,DATA,lDATAl,<DATAlDATA,FDATA,lLDATAl,DATAlDATA,< DATA,l|DATAl,DATAl DATA,,DATA,ll&DATAl,DATAl&DATA,LDATA,lDATAl,DATAl,DATA,lDATA,lDATAl,DATAlL DATA, DATA,l DATAl, DATAl\ DATA, DATA,lDATAl,< DATAlDATA,DATA,lDATAl,\DATAlDATA, DATA,l DATAl,\ DATAl DATA, DATA,l< DATAl,|DATAlDATA,DATA,llDATAl,DATAl&DATA,L DATA,l&DATAl,DATAl\DATA,DATA,l\DATAl,|#DATAlDATA, DATA,l \ DATAl, DATAl HDATA,!lDATA,l!DATAl," DATAl"\ DATA," DATA,l"DATAl,# DATAl#LDATA,#|-DATA,l# DATAl,$DATAl$\CDATA,$DATA,l$DATAl,%<DATAl%|+DATA,%.DATA,l&<DATAl,&DATAl&&DATA,',DATA,l'|;DATAl,'DATAl(,$DATA,(|DATA,l(DATAl,) DATAl)\"DATA,)&DATA,l)DATAl,*LDATAl*<DATA,+ DATA,l+\4DATAl,+DATAl+DATA,,LDATA,l,9DATAl,- 0DATAl-lDATA,-DATA,l-DATAl,.,DATAl.\DATA,.ZDATA,l/<DATAl,/DATAl/DATA,0,DATA,l0|DATAl,0HDATAl1L DATA,1 DATA,l1#DATAl,2%DATAl2l%DATA,2DATA,l2DATAl,3,%DATAl3|DATA,3DATA,l4DATAl,4l1DATAl43DATA,5,3DATA,l5DATAl,5DATAl5DATA,6<DATA,l6lDATAl,6)DATAl7 DATA,7\DATA,l7DATAl,7DATAl8 DATA,8LDATA,l8|ADATAl,8DATAl9< DATA,9| DATA,l9DATAl,9BDATAl:lDATA,:DATA,l:DATAl,;LDATAl;DATA,;(DATA,l<,7DATAl,<DATAl<<DATA ,=LDATA , l=DATA l  ,=DATA   l> DATA  , >\DATA , l > DATA l  ,>"DATA   l?<DATA  , ?|DATA , l ? DATA l  ,? DATA   l@<DATA  , @lDATA , l @DATA l  ,@DATA   lA,DATA  , AlDATA , l ADATA l  ,ADATA   lB<DATA , BDATA,l BDATAl,C DATAlCLDATA,CDATA,lCDATAl,C DATAlD< DATA,D| DATA,lD DATAl,D+DATAlE\+DATA,E DATA,lEDATAl,F,ADATAlFDATA,F DATA,lG, DATAl,GlDATAlGBDATA,HDATA,lH\DATAl,HDATAlHDATA,ILDATA,lI DATAl,IDATAlJDATA,JlMDATA,lJDATAl,K,DATAlKlDATA,K DATA,lK DATAl,L<DATAlL DATA,L!DATA,lM,BDATAl,M DATAlMDATA,N DATA,lN\ DATAl,N DATAlNDATA,ODATA,lOlDATAl,ODATAlO!DATA,PLJDATA,lP DATAl,Q DATAlQLDATA,Q DATA,lQDATAl,RDATAlR\+DATA,R DATA,lRDATAl,S<DATAlSDATA,SDATA,lTDATAl,TlDATAlTDATA,TDATA,lU, DATAl,UlDATAlU!DATA,U DATA,lV<DATAl,VlADATAlVDATA ,W DATA , lW\ DATA l  ,WDATA   lWBDATA !, XL*DATA!,!l X%DATA!l!!,XDATA!!!lY, DATA!",!YlDATA","l!Y$DATA"l"",Z DATA"""lZL$DATA"#,"ZDATA#,#l"ZDATA#l##,[ DATA###l[L*DATA#$,#[2DATA$,$l#\ DATA$l$$,\LDATA$$$l\DATA$%,$\DATA%,%l$\ DATA%l%%,]<DATA%%%l]| DATA%&,%] DATA&,&l%]DATA&l&&,^<DATA&&&l^|DATA&',&^DATA','l&_ DATA'l'',_L DATA'''l_DATA'(,'_DATA(,(l'`DATA(l((,`\DATA(((l`KDATA(),(aDATA),)l(al DATA)l)),a'DATA)))la(DATA)*,)b\ DATA*,*l)bDATA*l**,b&DATA***lc<'DATA*+,*cDATA+,+l*c DATA+l++,d DATA+++ld\7DATA+,,+d8DATA,,,l+e,DATA,l,,,e|HDATA,,,leDATA,-,,f, DATA-,-l,flDATA-l--,fDATA---lfDATA-.,-g DATA.,.l-g\ DATA.l..,gDATA...lg4DATA./,.h<4DATA/,/l.hDATA/l//,hDATA///li !DATA/0,/i\!DATA0,0l/iDATA0l00,i%DATA000lj<"DATA01,0j"DATA1,1l0jDATA1l11,kDATA111lkDATA12,1l 4DATA2,2l1llDATA2l22,l4DATA222lm +DATA23,2ml DATA3,3l2m3DATA3l33,n +DATA333lnl4DATA34,3n4DATA4,4l3o,DATA4l44,olDATA444loDATA45,4o4DATA5,5l4p\4DATA5l55,pDATA555lp DATA56,5q,DATA6,6l5ql DATA6l66,qDATA666lq DATA67,6rDATA7,7l6rlDATA7l77,rDATA777lrDATA78,7s ADATA8,8l7s|DATA8l88,s DATA888ls DATA89,8t<DATA9,9l8t|BDATA9l99,t#DATA999lu<?DATA9:,9u(DATA:,:l9v DATA:l::,v<DATA:::lv| DATA:;,:v DATA;,;l:vDATA;l;;,w<)DATA;;;lwDATA;<,;wDATA<,,=yDATA>,>l=z<DATA>l>>,z| DATA>>>lz DATA>?,>zDATA?,?l>{< DATA?l??,{|DATA???l{ DATA?@,?{DATA@,@l?|<DATA@l@@,||!DATA@@@l|DATA@A,@} DATAA,Al@}L DATAAlAA,} DATAAAAl}DATAAB,A~ "DATAB,BlA~\!DATABlBB,~"DATABBBl~1DATABC,B\/DATAC,ClB!DATAClCC,΀ DATACCCl΀L!DATACD,C΀ DATAD,DlC΀DATADlDD,΁,DATADDDl΁|%DATADE,D΁hDATAE,ElD΂lMDATAElEE,΂DATAEEEl΃,DATAEF,E΃lDATAF,FlE΃DATAFlFF,΃ DATAFFFl΄<!DATAFG,F΄!DATAG,GlF΄4DATAGlGG,΅<HDATAGGGl΅DATAGH,G΅6DATAH,HlGΆ\8DATAHlHH,Ά DATAHHHl· DATAHI,H·LDATAI,IlH·|DATAIlII,· DATAIIIl·DATAIJ,IΈL&DATAJ,JlIΈ DATAJlJJ,ΈDATAJJJlΉDATAJK,JΉL$DATAK,KlJΉDATAKlKK,Ή%DATAKKKlΊ, DATAKL,KΊl:DATAL,LlKΊ/DATALlLL,΋<DATALLLl΋lDATALM,L΋ DATAM,MlL΋ DATAMlMM,Ό,DATAMMMlΌlDATAMN,MΌDATAN,NlMΌDATANlNN,΍<DATANNNl΍|DATANO,N΍DATAO,OlNΎ DATAOlOO,Ύ\DATAOOOlΎDDATAOP,OΏDATAP,PlOΏL>DATAPlPP,Ώ*DATAPPPlΐ DATAPQ,Pΐ\DATAQ,QlPΐDATAQlQQ,ΐDATAQQQlΑ%DATAQR,QΑlTDATAR,RlQΑDATARlRR,Β<~DATARRRlΒDATARS,RΓ,YDATAS,SlRΓDATASlSS,ΓDATASSSlΔ<DATAST,SΔl DATAT,TlSΔDATATlTT,ΔDATATTTlΕ,0DATATU,TΕDATAU,UlTΕDATAUlUU,Ζ 'DATAUUUlΖ\)DATAUV,UΖDATAV,VlUΖ DATAVlVV,Η<DATAVVVlΗ|nDATAVW,VΘ DATAW,WlVΘ\DATAWlWW,Θ DATAWWWlΘ DATAWX,WΙ,DATAX,XlWΙlKDATAXlXX,Ι DATAXXXlΚ, DATAXY,XΚl DATAY,YlXΚ DATAYlYY,Κ-DATAYYYlΛL DATAYZ,YΛ4DATAZ,ZlYΛDATAZlZZ,ΜDATAZZZlΜ\DATAZ[,ZΜDATA[,[lZΜDATA[l[[,ΝDATA[[[lΝlDATA[\,[ΝDATA\,\l[Ν DATA\l\\,ΞDATA\\\lΞLADATA\],\ΞDATA],]l\Ξ DATA]l]],Ο< DATA]]]lΟ|DATA]^,]ΟBDATA^,^l]Π,DATA^l^^,Π|DATA^^^lΠDATA^_,^Ρ DATA_,_l^Ρ\"DATA_l__,ΡDATA___lΡDATA_`,_΢,DATA`,`l_΢\DATA`l``,΢ DATA```l΢DATA`a,`Σ,DATAa,al`Σ|DATAalaa,ΣDATAaaalΤ =DATAab,aΤ|?DATAb,blaΤ>DATAblbb,Υ\DATAbbblΥ DATAbc,bΥDATAc,clbΦ'DATAclcc,Φl DATAccclΦDATAcd,cΦDATAd,dlcΧ(DATAdldd,Χ|"DATAdddlΧ"DATAde,dΨ#DATAe,eldΨl#DATAelee,Ψ$DATAeeelΩ #DATAef,eΩ\$DATAf,fleΩ$DATAflff,Ω%DATAffflΪL"DATAfg,fΪDATAg,glfΪDATAglgg,ΪDATAggglΫ<DATAgh,gΫ|DATAh,hlgΫDATAhlhh,ΫDATAhhhlάLDATAhi,hάDATAi,ilhάDATAilii,έDATAiiilέlDATAij,iέ DATAj,jliέ"DATAjljj,ήL DATAjjjlή"DATAjk,jή/DATAk,kljί<*DATAklkk,ίDATAkkklίDATAkl,kΰ ADATAl,llkΰ|DATAllll,ΰ DATAllllΰ DATAlm,lα<DATAm,mllα|BDATAmlmm,αDATAmmmlβ<DATAmn,mβDATAn,nlmβDATAnlnn,βDATAnnnlγL"DATAno,nγDATAo,olnγDATAoloo,δDATAooolδLDATAop,oδ DATAp,ploδDATAplpp,εDATAppplεlDATApq,pεDATAq,qlpε?DATAqlqq,ζlADATAqqqlζ@DATAqr,qηLDATAr,rlqη|$DATArlrr,η'DATArrrlθ DATArs,rθ\DATAs,slrθDATAslss,θDATAssslθDATAst,sι<+DATAt,tlsιDATAtltt,ιDATAtttlκDATAtu,tκ#DATAu,ultλ,DATAuluu,λ\DATAuuulλDATAuv,uλDATAv,vluμ<DATAvlvv,μ|DATAvvvlμDATAvw,vνDATAw,wlvνlDATAwlww,νDATAwwwlνDATAwx,wξ1DATAx,xlwξ|DATAxlxx,ξDATAxxxlξDATAxy,xο<#DATAy,ylxο/DATAylyy,οDATAyyyl<DATAyz,y|DATAz,zlyDATAzlzz,DATAzzzl<DATAz{,z|%DATA{,{lz0DATA{l{{,,DATA{{{l|DATA{|,{¼DATA|,|l{DATA|l||,,#DATA|||l|DATA|},|ü%DATA},}l| DATA}l}},\DATA}}}l DATA}~,}\DATA~,~l}Ō DATA~l~~,DATA~~~l,%DATA~,~|/DATA,l~DATAl,,%DATAl| DATAɀ, DATAɀ,ɀl%DATAɀlɀɀ,l#DATAɀɀɀlȼ DATAɀɁ,ɀ %DATAɁ,Ɂlɀ\%DATAɁlɁɁ,ɬ DATAɁɁɁl%DATAɁɂ,ɁL$DATAɂ,ɂlɁʜDATAɂlɂɂ,%DATAɂɂɂl<%DATAɂɃ,ɂˌDATAɃ,ɃlɂDATAɃlɃɃ,DATAɃɃɃl\#DATAɃɄ,Ƀ̬DATAɄ,ɄlɃ%DATAɄlɄɄ,LDATAɄɄɄl͌DATAɄɅ,Ʉ<DATAɅ,ɅlɄΌ)DATAɅlɅɅ,DATAɅɅɅl<%DATAɅɆ,ɅόDATAɆ,ɆlɅDATAɆlɆɆ,ЌDATAɆɆɆl-DATAɆɇ,Ɇ<DATAɇ,ɇlɆь%DATAɇlɇɇ,DATAɇɇɇl,DATAɇɈ,ɇDATAɈ,Ɉlɇ,(DATAɈlɈɈ,ӌ DATAɈɈɈl%DATAɈɉ,Ɉ,#DATAɉ,ɉlɈ|DATAɉlɉɉ,%DATAɉɉɉlDATAɉɊ,ɉlDATAɊ,ɊlɉDATAɊlɊɊ,lDATAɊɊɊlּDATAɊɋ,Ɋ%DATAɋ,ɋlɊL"DATAɋlɋɋ,לDATAɋɋɋl%DATAɋɌ,ɋ,'DATAɌ,Ɍlɋ|DATAɌlɌɌ,ؼ%DATAɌɌɌl DATAɌɍ,Ɍ\DATAɍ,ɍlɌ٬%DATAɍlɍɍ,)DATAɍɍɍl\DATAɍɎ,ɍڜ%DATAɎ,Ɏlɍ DATAɎlɎɎ,,DATAɎɎɎll"DATAɎɏ,Ɏۼ"DATAɏ,ɏlɎ /DATAɏlɏɏ,l#DATAɏɏɏlܼDATAɏɐ,ɏDATAɐ,ɐlɏ,ADATAɐlɐɐ,ݜDATAɐɐɐl DATAɐɑ,ɐ DATAɑ,ɑlɐ\DATAɑlɑɑ,ޜBDATAɑɑɑl DATAɑɒ,ɑL$DATAɒ,ɒlɑߜDATAɒlɒɒ,DATAɒɒɒlDATAɒɓ,ɒlDATAɓ,ɓlɒDATAɓlɓɓ,DATAɓɓɓl DATAɓɔ,ɓLDATAɔ,ɔlɓ|DATAɔlɔɔ,DATAɔɔɔlDATAɔɕ,ɔ, DATAɕ,ɕlɔl DATAɕlɕɕ,DATAɕɕɕlDATAɕɖ,ɕDATAɖ,ɖlɕl"DATAɖlɖɖ,DATAɖɖɖl #DATAɖɗ,ɖ\DATAɗ,ɗlɖDATAɗlɗɗ,&DATAɗɗɗlDATAɗɘ,ɗ\&DATAɘ,ɘlɗDATAɘlɘɘ,3DATAɘɘɘlL2DATAɘə,ɘ6DATAə,əlɘ >DATAələə,|7DATAəəəlDATAəɚ,ə,DATAɚ,ɚlə|&DATAɚlɚɚ,DATAɚɚɚl &DATAɚɛ,ɚ\DATAɛ,ɛlɚDATAɛlɛɛ,3DATAɛɛɛlLDATAɛɜ,ɛDATAɜ,ɜlɛDATAɜlɜɜ, DATAɜɜɜl\DATAɜɝ,ɜ DATAɝ,ɝlɜ&DATAɝlɝɝ,<%DATAɝɝɝl&DATAɝɞ,ɝ/DATAɞ,ɞlɝ<DATAɞlɞɞ,|:DATAɞɞɞl3DATAɞɟ,ɞLDATAɟ,ɟlɞDATAɟlɟɟ,&DATAɟɟɟl,4DATAɟɠ,ɟDATAɠ,ɠlɟDATAɠlɠɠ,DATAɠɠɠl, DATAɠɡ,ɠl%DATAɡ,ɡlɠDATAɡlɡɡ, %DATAɡɡɡl\ DATAɡɢ,ɡ%DATAɢ,ɢlɡ3DATAɢlɢɢ,L%DATAɢɢɢl DATAɢɣ,ɢ%DATAɣ,ɣlɢ,DATAɣlɣɣ,lDATAɣɣɣl%DATAɣɤ,ɣDATAɤ,ɤlɣL%DATAɤlɤɤ,DATAɤɤɤl%DATAɤɥ,ɤ,DATAɥ,ɥlɤlDATAɥlɥɥ,1DATAɥɥɥl DATAɥɦ,ɥL%DATAɦ,ɦlɥDATAɦlɦɦ,%DATAɦɦɦl, DATAɦɧ,ɦlDATAɧ,ɧlɦDATAɧlɧɧ,8DATAɧɧɧlLDATAɧɨ,ɧ7DATAɨ,ɨlɧ]DATAɨlɨɨ,DATAɨɨɨlDATAɨɩ,ɨ DATAɩ,ɩlɨ\6DATAɩlɩɩ,%DATAɩɩɩl DATAɩɪ,ɩL%DATAɪ,ɪlɩDATAɪlɪɪ,DATAɪɪɪlDATAɪɫ,ɪlDATAɫ,ɫlɪDATAɫlɫɫ, DATAɫɫɫlLDATAɫɬ,ɫDATAɬ,ɬlɫ DATAɬlɬɬ,,DATAɬɬɬll(DATAɬɭ,ɬDATAɭ,ɭlɬDATAɭlɭɭ,\ DATAɭɭɭl DATAɭɮ,ɭDATAɮ,ɮlɭ4DATAɮlɮɮ,|DATAɮɮɮl9DATAɮɯ,ɮDATAɯ,ɯlɮL4DATAɯlɯɯ,DATAɯɯɯl DATAɯɰ,ɯ,DATAɰ,ɰlɯ\DATAɰlɰɰ,DATAɰɰɰlADATAɰɱ,ɰ,DATAɱ,ɱlɰl DATAɱlɱɱ, DATAɱɱɱlDATAɱɲ,ɱ,BDATAɲ,ɲlɱDATAɲlɲɲ,#DATAɲɲɲl<2DATAɲɳ,ɲDDATAɳ,ɳlɲ DATAɳlɳɳ,L'DATAɳɳɳl%DATAɳɴ,ɳDATAɴ,ɴlɳDATAɴlɴɴ,\DATAɴɴɴlDATAɴɵ,ɴDATAɵ,ɵlɴ DATAɵlɵɵ,<DATAɵɵɵl DATAɵɶ,ɵDATAɶ,ɶlɵ DATAɶlɶɶ, LKDATAɶɶɶl DATAɶɷ,ɶ dDATAɷ,ɷlɶ DATAɷlɷɷ, DATAɷɷɷl ,DATAɷɸ,ɷ lDATAɸ,ɸlɷ DATAɸlɸɸ, EDATAɸɸɸl lDATAɸɹ,ɸ (DATAɹ,ɹlɸ DATAɹlɹɹ, \DATAɹɹɹl DATAɹɺ,ɹ DATAɺ,ɺlɹ,DATAɺlɺɺ,lDATAɺɺɺlDATAɺɻ,ɺ *DATAɻ,ɻlɺlDATAɻlɻɻ,DATAɻɻɻlDATAɻɼ,ɻ,DATAɼ,ɼlɻlDATAɼlɼɼ,DATAɼɼɼlDATAɼɽ,ɼL$DATAɽ,ɽlɼDATAɽlɽɽ,DATAɽɽɽl,DATAɽɾ,ɽl'DATAɾ,ɾlɽDATAɾlɾɾ,DATAɾɾɾl< DATAɾɿ,ɾ|DATAɿ,ɿlɾDATAɿlɿɿ, DATAɿɿɿlL%DATAɿ,ɿDATA,lɿDATAl,<DATAl|DATA,DATA,l DATAl,L1DATAlDATA,DATA,l<DATAl¬,|DATA¬l DATA,¬.DATA,l|\DATAlì, DATAìl\-DATA,ìDATA,l DATAlĬ,LDATAĬlDATA,ĬDATA,l,DATAlŬ,|DATAŬlDATA,ŬDATA,l\DATAlƬ,DATAƬl DATA,Ƭ<DATA,lDATAlǬ,DATAǬl(DATA,Ǭ|DATA,lDATAlȬ, DATAȬl\ DATA,ȬDATA,lDATAlɬ, DATAɬl \DATA,ɬ FDATA,l )DATAlʬ,!\ DATAʬl! DATA,ʬ!DATA,l"< DATAlˬ,"*DATAˬl"#DATA,ˬ#<$DATA,l#4DATAl̬,#GDATA̬l$\<DATA,̬$>DATA,l%<=DATAlͬ,%/DATAͬl& 3DATA,ͬ&l DATA,l&DATAlά,& DATAάl'L1DATA,ά'DATA,l'DATAlϬ,(<.DATAϬl(DATA,Ϭ()DATA,l)<DATAlЬ,) DATAЬl)DATA,Ь*DATA,l*\DATAlѬ,*DATAѬl*DATA,Ѭ+<+DATA,l+ DATAlҬ,+DATAҬl,DATA,Ҭ,\DATA,l,DATAlӬ,,DATAӬl-, DATA,Ӭ-|%DATA,l-DATAlԬ,.DATAԬl.lDATA,Ԭ.(DATA,l/ DATAlլ,/<DATAլl/"DATA,լ/DATA,l0DATAl֬,0\DATA֬l0CDATA,֬1 DATA,l1L DATAl׬,1DATA׬l1 DATA,׬2,)DATA,l2DATAlج,2DATAجl3&DATA,ج3l DATA,l3 DATAl٬,3DATA٬l4DATA,٬4lDATA,l4GDATAlڬ,5 DATAڬl5<DATA,ڬ5| DATA,l5DATAl۬,5DATA۬l6,DATA,۬6\ADATA,l6DATAlܬ,7 DATAܬl7L DATA,ܬ7DATA,l7BDATAlݬ,8<DATAݬl8|?DATA,ݬ8DATA,l9DATAlެ,9\3DATAެl9DATA,ެ9DATA,l:,DATAl߬,:|&DATA߬l:DATA,߬:"DATA,l;L#DATAl,; DATAl;%DATA,<,DATA,l?DATA,>DATA,l>DATAl,>ADATAl?\DATA,? DATA,l? DATAl,@,DATAl@lCDATA,@DATA,lADATAl,A\DATAlADATA,A6DATA,lB<DATAl,B|DATAlBDATA,CDATA,lClDATAl,C DATAlCDATA,D<DATA,lDlDATAl,DADATAlE DATA,EL DATA,lE DATAl,EDATAlF CDATA,F|DATA,lF DATAl,FDATAlG<DATA,G| DATA,lG!DATAl,H DATAlH<DATA,H|DATA,lHDATAl,I DATAlI\DATA,IDATA,lI DATAl,J,DATAlJ\DATA,JDATA,lJADATAl,K,DATAlKl DATA,K DATA,lKDATAl,L,BDATAlL DATA,LPDATA,lM\YDATAl,MUDATAlNl4DATA,N9DATA,lO<@DATAl,OCDATAlP&DATA,PlDATA,lPDATAl,PDATAlQ,DATA,Q|DATA,lQDATAl,Q1DATAlRL5DATA,R8DATA,lSDATAl,SLDATAlSDATA,SDATA,lT MDATAl,TDATAlTGDATA,U,DATA,lU\DATAl,UADATAlV DATA,VLkDATA,lV_DATAl,W|DATAlW^DATA,XL]DATA,lXDATAl,YDATAlYDATA,Z<DATA,lZ?DATAl,ZaDATAl[tDATA,\,fDATA,l\DATAl,\DATAl],DATA,]lDATA,l^,DATAl,^\DATAl^JDATA,_,DATA,l_lBDATAl,_VDATAl`\\DATA,`GDATA,la\*DATAl,a>DATAlb,>DATA,b=DATA,lc MDATAl,cJDATAld PDATA,dDATA,ldDATAl,e DATAleL8DATA,eDATA,le2DATAl,f\DATAlfDATA,fDATA,lgDATAl,g\DATAlgDATA,gDATA,lh DATAl,h\DATAlhDATA,hDATA,liLDATAl,iDATAliDATA,j,>DATA,ljDATAl,jDATAlj,DATA,k\RDATA,lkUDATAl,l\DATAllDATA,lDATA,llDATAl,m<KDATAlm:DATA,n,QDATA,lnbDATAl,o<YDATAlo\DATA,p\DATA,lqjDATAl,qjDATAlr\dDATA ,rWDATA , lslDATA l  ,sbDATA   ltLWDATA  , tDATA , l tDATA l  ,uDATA   lvWDATA  , w dDATA , l wZDATA l  ,x,8DATA   lx0DATA  , xDATA , l y,DATA l  ,y|DATA   lyDATA  , yDATA , l z<DATA l  ,z|DATA   lz DATA , zDATA,l {LDATAl,{DDATAl{DATA,|LDATA,l|DATAl,|=DATAl}LDATA,}|DATA,l}5DATAl,~8DATAl~:DATA,~?DATA,llTDATAl,DATAlπbDATA,πdDATA,lρ<ZDATAl,ρ8DATAlς<DATA,ς|7DATA,lςDATAl,σ 1DATAlσlDATA,σDATA,lσDATAl,τ<DATAlτ|DATA,τDATA,lτ DATAl,υ<DATAlυDATA,υDATA,lφ,DATAl,φlDATAlφ DATA,φDATA,lχDATAl,χLDATAlχDATA,χDATA,lψDATAl,ψ\DATAlψDATA,ψDATA,lω DATAl,ω\DATAlωDATA,ωDATA,lϊ,'DATAl,ϊ| DATAlϊDATA,ϋ DATA,lϋLDATAl,ϋ'DATAlϋDATA,ό<DATA,lό|IDATAl,ό DATAlύ<DATA,ύlDATA,lύDATAl,ύDATAlώ<DATA,ώ|DATA,lώDATAl,ώ$DATAlϏL$DATA,Ϗ DATA,lϏDATAl,ϐ,DATAlϐl DATA ,ϐ2DATA , lϑ DATA l  ,ϑ<DATA   lϑ|DATA !, ϑ/DATA!,!l ϒDATA!l!!,ϒ\DATA!!!lϒDATA!",!ϒADATA","l!ϓ,DATA"l"",ϓl DATA"""lϓ DATA"#,"ϓDATA#,#l"ϔ,BDATA#l##,ϔDATA###lϔDATA#$,#ϕDATA$,$l#ϕlDATA$l$$,ϕDATA$$$lϕDATA$%,$ϖ,DATA%,%l$ϖlDATA%l%%,ϖDATA%%%lϖDATA%&,%ϗ<DATA&,&l%ϗ|DATA&l&&,ϗDATA&&&lϘ DATA&',&ϘLDATA','l&ϘDATA'l'',ϘDATA'''lϙDATA'(,'ϙ\DATA(,(l'ϙADATA(l((,ϙDATA(((lϚL DATA(),(Ϛ DATA),)l(ϚDATA)l)),ϛ ADATA)))lϛ|DATA)*,)ϛ1DATA*,*l)ϜDATA*l**,ϜlDATA***lϜDATA*+,*Ϝ"DATA+,+l*ϝLDATA+l++,ϝDATA+++lϝDATA+,,+ϞDATA,,,l+Ϟ\'DATA,l,,,Ϟ DATA,,,lϞDATA,-,,ϟ<'DATA-,-l,ϟDATA-l--,ϟ'DATA---lϠ DATA-.,-Ϡ<DATA.,.l-ϠlDATA.l..,ϠDATA...lϠDATA./,.ϡLDATA/,/l.ϡ|DATA/l//,ϡADATA///lϢDATA/0,/Ϣl DATA0,0l/Ϣ DATA0l00,ϢDATA000lϣ,ADATA01,0ϣDATA1,1l0ϣDATA1l11,Ϥ$DATA111lϤlDATA12,1ϤDATA2,2l1Ϥ DATA2l22,ϥ,DATA222lϥ|DATA23,2ϥ DATA3,3l2ϥ&DATA3l33,ϦLDATA333lϦ| DATA34,3ϦDATA4,4l3ϧ DATA4l44,ϧL DATA444lϧDATA45,4ϧ DATA5,5l4Ϩ"DATA5l55,Ϩl,DATA555lϨDATA56,5ϩ 5DATA6,6l5ϩlDATA6l66,ϩDATA666lϩDATA67,6Ϫ DATA7,7l6Ϫ\DATA7l77,ϪADATA777lϪDATA78,7ϫL DATA8,8l7ϫ DATA8l88,ϫDATA888lϬ BDATA89,8Ϭ|DATA9,9l8ϬDATA9l99,ϭ &DATA999lϭ\DATA9:,9ϭ"DATA:,:l9ϭDATA:l::,ϮDATA:::lϮLADATA:;,:ϮDATA;,;l:ϯ DATA;l;;,ϯL DATA;;;lϯDATA;<,;ϯBDATA<,,=ϲLDATA>,>l=ϲDATA>l>>,ϲDATA>>>lϳ,DATA>?,>ϳlDATA?,?l>ϳDATA?l??,ϳDATA???lϴLDATA?@,?ϴ DATA@,@l?ϴDATA@l@@,ϵDATA@@@lϵ\DATA@A,@ϵDATAA,Al@ϵDATAAlAA,϶<DATAAAAl϶|DATAAB,A϶DATAB,BlAϷ DATABlBB,Ϸ\DATABBBlϷDATABC,BϷDATAC,ClBϸDATAClCC,ϸ\DATACCClϸDATACD,Cϸ DATAD,DlCϹDATADlDD,ϹLADATADDDlϹDATADE,DϹ DATAE,ElDϺ< DATAElEE,Ϻ|DATAEEElϺBDATAEF,Eϻ,DATAF,FlEϻ|KDATAFlFF,ϻDATAFFFlϼ<DATAFG,Fϼ|DATAG,GlFϼDATAGlGG,ϼDATAGGGlϽ<DATAGH,GϽ|DATAH,HlGϽDATAHlHH,ϽDATAHHHlϾ<DATAHI,HϾ|DATAI,IlHϾDATAIlII,Ͽ DATAIIIlϿ\DATAIJ,IϿDATAJ,JlIϿDATAJlJJ,,DATAJJJllDATAJK,JDATAK,KlJDATAKlKK,LDATAKKKlDATAKL,K DATAL,LlKDATALlLL,\DATALLLlœDATALM,LDATAM,MlLDATAMlMM,lDATAMMMlüDATAMN,M DATAN,NlM,/DATANlNN,ČDATANNNlDATANO,NDATAO,OlNLADATAOlOO,żDATAOOOl DATAOP,O< DATAP,PlO|DATAPlPP,ƼBDATAPPPl,DATAPQ,Pl,DATAQ,QlP6DATAQlQQ,,DDATAQQQlȜ/DATAQR,QDATAR,RlQL DATARlRR,ɌDATARRRlDATARS,R"DATAS,SlRlDATASlSS,ʬ DATASSSl!DATAST,S<DATAT,TlS| DATATlTT,˼#DATATTTl DATATU,TL DATAU,UlŤDATAUlUU,DATAUUUlDATAUV,Ul DATAV,VlUͬDATAVlVV, DATAVVVl<!DATAVW,VΌ$DATAW,WlVWDATAWlWW,\DATAWWWlϜ"DATAWX,WDATAX,XlW,DATAXlXX,lDATAXXXlмDATAXY,X DATAY,YlX\ DATAYlYY,ќ4DATAYYYl DATAYZ,Y<DATAZ,ZlYҌ$DATAZlZZ,$DATAZZZl,$DATAZ[,Z| DATA[,[lZӼ!DATA[l[[, 0DATA[[[llDATA[\,[ԬDATA\,\l[!DATA\l\\,L DATA\\\lՌDATA\],\!DATA],]l\, DATA]l]],l DATA]]]lּ/DATA]^,]!DATA^,^l]l/DATA^l^^,!DATA^^^l/DATA^_,^|!DATA_,_l^!DATA_l__,EDATA___lٌDATA_`,_'DATA`,`l_ DATA`l``,\DATA```lڬEDATA`a,` DATAa,al`\"DATAalaa,۬+DATAaaal )DATAab,al DATAb,blaܬDATAblbb,'DATAbbblL"DATAbc,bݜ DATAc,clb!DATAclcc,, DATAcccll!DATAcd,c޼ DATAd,dlcDATAdldd,LDATAdddlߜDATAde,d$DATAe,eld,"DATAelee,|DATAeeelDATAef,e DATAf,fle\DATAflff,$DATAfffl"DATAfg,f<DATAg,glf|DATAglgg,DATAggglDATAgh,glDATAh,hlgDATAhlhh, DATAhhhl,DATAhi,h|DATAi,ilhDATAilii,DATAiiil\DATAij,i DATAj,jliDATAjljj,,#DATAjjjl|DATAjk,jDATAk,kljDATAklkk,L#DATAkkkl(DATAkl,kDATAl,llk<DATAllll,| DATAllllDATAlm,l 5DATAm,mlllSDATAmlmm, DATAmmml,DATAmn,m|?DATAn,nlm DATAnlnn,,ADATAnnnlDATAno,n>DATAo,olnLDATAoloo,DATAoool!DATAop,oDATAp,ploLDATAplpp,|DATApppl@DATApq,p<DATAq,qlpl DATAqlqq,DATAqqql@DATAqr,q\DATAr,rlq'DATArlrr,(DATArrrl<DATArs,rl6DATAs,slr>DATAslss,<DATAsssl|%DATAst,s%DATAt,tlsDATAtltt,L3DATAtttl1DATAtu,t 3DATAu,ultlDATAuluu,4DATAuuul DATAuv,uLDATAv,vlu DATAvlvv,DATAvvvl DATAvw,v<<DATAw,wlvDATAwlww,9DATAwwwlLDATAwx,w3DATAx,xlwDATAxlxx,,'DATAxxxl|DATAxy,x8DATAy,ylx&DATAylyy,lDATAyyylDATAyz,yDATAz,zly,DATAzlzz,lCDATAzzzlDATAz{,z &DATA{,{lz\DATA{l{{,,DATA{{{lDATA{|,{,'DATA|,|l{|%DATA|l||,DATA|||lDATA|},|L DATA},}l|DATA}l}},DATA}}}l 5DATA}~,}lDATA~,~l}0DATA~l~~,?DATA~~~llDATA~,~DATA,l~DATAl, DATAl\&DATAʀ,DATAʀ,ʀlDATAʀlʀʀ,\4DATAʀʀʀlDATAʀʁ,ʀDATAʁ,ʁlʀDATAʁlʁʁ,<DATAʁʁʁl|DATAʁʂ,ʁDATAʂ,ʂlʁcDATAʂlʂʂ,|DATAʂʂʂlDATAʂʃ,ʂDATAʃ,ʃlʂ,$DATAʃlʃʃ,|DATAʃʃʃl3DATAʃʄ,ʃDATAʄ,ʄlʃ\DATAʄlʄʄ,DATAʄʄʄlDATAʄʅ,ʄ,"DATAʅ,ʅlʄ|)DATAʅlʅʅ,DATAʅʅʅl,DATAʅʆ,ʅl)DATAʆ,ʆlʅDATAʆlʆʆ, DATAʆʆʆl<RDATAʆʇ,ʆDATAʇ,ʇlʆDATAʇlʇʇ,,DATAʇʇʇllDATAʇʈ,ʇDATAʈ,ʈlʇDATAʈlʈʈ, DATAʈʈʈl L%DATAʈʉ,ʈ DATAʉ,ʉlʈ DATAʉlʉʉ, RDATAʉʉʉl [DATAʉʊ,ʉ ,TDATAʊ,ʊlʉ PDATAʊlʊʊ, ,QDATAʊʊʊl YDATAʊʋ,ʊ <YDATAʋ,ʋlʊ MDATAʋlʋʋ,LXDATAʋʋʋlZDATAʋʌ,ʋlPDATAʌ,ʌlʋQDATAʌlʌʌ,lVDATAʌʌʌl\DATAʌʍ,ʌ|ODATAʍ,ʍlʌDATAʍlʍʍ,LqDATAʍʍʍlnDATAʍʎ,ʍnDATAʎ,ʎlʍ,nDATAʎlʎʎ,oDATAʎʎʎllnDATAʎʏ,ʎ mDATAʏ,ʏlʎnDATAʏlʏʏ,LnDATAʏʏʏlnDATAʏʐ,ʏoDATAʐ,ʐlʏ,oDATAʐlʐʐ,pDATAʐʐʐlllDATAʐʑ,ʐ lDATAʑ,ʑlʐ&DATAʑlʑʑ,YDATAʑʑʑlXDATAʑʒ,ʑXDATAʒ,ʒlʑXDATAʒlʒʒ,<VDATAʒʒʒlUDATAʒʓ,ʒ<XDATAʓ,ʓlʒ^DATAʓlʓʓ, \^DATAʓʓʓl YDATAʓʔ,ʓ!|UDATAʔ,ʔlʓ!XDATAʔlʔʔ,"XDATAʔʔʔl#RDATAʔʕ,ʔ#HDATAʕ,ʕlʔ$rDATAʕlʕʕ,$pDATAʕʕʕl%\pDATAʕʖ,ʕ%pDATAʖ,ʖlʕ&pDATAʖlʖʖ,'<pDATAʖʖʖl'pDATAʖʗ,ʖ(|jDATAʗ,ʗlʖ)mDATAʗlʗʗ,)lDATAʗʗʗl*\lDATAʗʘ,ʗ*sDATAʘ,ʘlʗ+jDATAʘlʘʘ,,<mDATAʘʘʘl,DATAʘʙ,ʘ-YDATAʙ,ʙlʘ-XDATAʙlʙʙ,.<XDATAʙʙʙl.WDATAʙʚ,ʙ/LWDATAʚ,ʚlʙ/VDATAʚlʚʚ,0LXDATAʚʚʚl0XDATAʚʛ,ʚ1lXDATAʛ,ʛlʚ1XDATAʛlʛʛ,2SDATAʛʛʛl3 XDATAʛʜ,ʛ3TDATAʜ,ʜlʛ4TDATAʜlʜʜ,4RDATAʜʜʜl5RDATAʜʝ,ʜ5RDATAʝ,ʝlʜ6RDATAʝlʝʝ,6RDATAʝʝʝl7RDATAʝʞ,ʝ7RDATAʞ,ʞlʝ8RDATAʞlʞʞ,8RDATAʞʞʞl9RDATAʞʟ,ʞ9RDATAʟ,ʟlʞ:RDATAʟlʟʟ,:RDATAʟʟʟl;RDATAʟʠ,ʟ;RDATAʠ,ʠlʟ<RDATAʠlʠʠ,<RDATAʠʠʠl=RDATAʠʡ,ʠ=RDATAʡ,ʡlʠ>RDATAʡlʡʡ,>RDATAʡʡʡl?RDATAʡʢ,ʡ?DATAʢ,ʢlʡ@LDATAʢlʢʢ,@DATAʢʢʢlADATAʢʣ,ʢB\yDATAʣ,ʣlʢC zDATAʣlʣʣ,C{DATAʣʣʣlDlxDATAʣʤ,ʣE|DATAʤ,ʤlʣEtDATAʤlʤʤ,FlqDATAʤʤʤlG DATAʤʥ,ʤGDATAʥ,ʥlʤHlDATAʥlʥʥ,IDATAʥʥʥlIDATAʥʦ,ʥJ|DATAʦ,ʦlʥK,DATAʦlʦʦ,KDATAʦʦʦlLDATAʦʧ,ʦM<DATAʧ,ʧlʦMDATAʧlʧʧ,NpDATAʧʧʧlO<pDATAʧʨ,ʧOpDATAʨ,ʨlʧP|pDATAʨlʨʨ,QnDATAʨʨʨlQmDATAʨʩ,ʨR\mDATAʩ,ʩlʨRlDATAʩlʩʩ,SjDATAʩʩʩlT<jDATAʩʪ,ʩTnDATAʪ,ʪlʩU|DATAʪlʪ,UDATA(#!BPY[DATA(ʪ""" Registration info Blender menues:DATAʪName:'Sflender'DATAʫ<Blender: 235DATAʫ|Group: 'Export'DATA<ʫTip: 'S2flender(V2.4) Exporter to Macromedia(R) Flash(TM)'DATA|"""DATA@ʬ,# -------------------------------------------------------------DATA,ʬ# Copyright (c) 2003,2004 Emilio Aguirre DATAʬ#DATALʭ,# This program is free software; you can redistribute it and/or modifyDATALʭ# it under the terms of the GNU General Public License as published byDATAHʮ,# the Free Software Foundation; either version 2 of the License, orDATA,ʮ# (at your option) any later version.DATAʮ#DATAHʯ,# This program is distributed in the hope that it will be useful,5{DATADʯ# but WITHOUT ANY WARRANTY; without even the implied warranty ofDATADʰ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See theDATA4ʰ|# GNU General Public License for more details.nDATAʰ#DATAHʱ # You should have received a copy of the GNU General Public LicenseDATADʱ|# along with this program; if not, write to the Free Software/DATAPʱ# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USADATAʲl#DATA@ʲ# -------------------------------------------------------------DATA@ʳ # -------------------------------------------------------------DATA\ʳ|# *This program is based on the Macromedia Flash SWF File Format Specification (version 3)DATATʴ # by Macromedia, Inc. Copyright(c) 1995-2003 Macromedia, Inc. All rights reserved. DATAPʴ# Macromedia and Flash are trademarks of Macromedia, Inc. (www.macromedia.com)DATA@ʵ # -------------------------------------------------------------DATAʵ|DATADʵ# ---------------------------------------------------------------DATAʶ# DATAʶL# Import SectionDATAʶ#pDATADʶ# --------------------------------------------------------------- DATAʷ,import BlenderDATAʷlfrom os import listdirDATA8ʷfrom Blender import Object,Lamp,Camera,NMesh,Types,sysDATA ʸ from Blender.Mathutils import *DATAʸ\from Blender.Draw import *DATAʸfrom Blender.Types import *DATAʸfrom Blender.BGL import *DATAʹLfrom Blender.Noise import *DATAʹfrom math import *DATA$ʹfrom operator import add,sub,mulDATAʺ,from time import *DATAʺlDATAʺDATA@ʺ# -------------------------------------------------------------DATAʻ<# Generic FunctionsDATA@ʻ|# -------------------------------------------------------------DATAʻdef MaxAbs(l):DATAʼ, if len(l)>0:DATAʼl m = abs(l[0])DATAʼ for i in l:DATAʼ if abs(i)>m: m = abs(i)DATA ʽ< return mDATAʽ| else: return 0DATAʽDATAʽdef BitSgn(val):DATAʾ, if val>0: return 0DATAʾl else: return 128DATAʾDATAʾdef Pad0(n):DATAʿ return [0]*nDATAʿ\DATAʿdef Pad1(n):DATAʿ return [1]*nDATA DATA<def Padding(s):DATA| if s<8: return Pad0(8-s)DATA  d = s % 8DATA   if d == 0:DATA L return []DATA else:DATA  n = 8 - dDATA return Pad0(n)DATA<DATA(ldef SetFileLength(movie,filelength):DATA¼ r = UI32(filelength)DATA movie[4] = r[0]DATA< movie[5] = r[1]DATA| movie[6] = r[2]DATAü movie[7] = r[3]DATA returnDATA,DATA\def GetChars(list):DATAĜ k = 0DATA l = 0DATA size = len(list)DATA< numbytes = size/8DATA$| if ((size % 8) >0): numbytes+=1DATA bytes = Pad0(numbytes)DATA   byte = 0 DATAL for i in range(size):DATA ƌ byte += list[i] * (2**(7-k)) DATA k+=1DATA   if k>7:DATAL bytes[l]=chr(byte)DATA nj byte = 0DATA  k = 0DATA  l+=1DATA(< if k>0 and k<8: bytes[l] = chr(byte)DATAȌ return bytesDATADATAdef PadChars(l):DATA< l.extend(Padding(len(l)))DATAɌ return GetChars(l)DATADATA def GetBinary(number,digits=0):DATAL if digits == 0:DATAʌ maxbits = 1024DATA else:DATA maxbits = digitsDATA< Bits = Pad0(maxbits) DATA| idx = maxbits-1DATA(˼ while (((number/2)!=0) and (idx>=0)):DATA  # Get modulusDATAL Bits[idx] = number % 2 DATA ̜ number/=2DATA  idx-=1DATA  if (number==1): Bits[idx]=1DATAl else: Bits[idx]=0DATAͬ if digits >0: return BitsDATA else: return Bits[idx:]DATALDATA |def NBits(val): return len(val)DATADATAdef InverseBits(l):DATA$< return map(lambda x:abs(x-1),l)DATAόDATAϼdef TwosComplement(val):DATA$  b = InverseBits(GetBinary(val))DATA\ d = GetBinary(1,len(b))DATAЬ r = []DATA c = 0DATA  l = range(len(b))DATAL l.reverse()DATAь for i in l:DATA s = b[i]+d[i]+cDATA  if s == 2: DATAL r.append(0)DATA Ҍ c = 1DATA else:DATA r.append(s)DATA < c = 0DATA| r.reverse()DATA Ӽ return rDATADATA@,# -------------------------------------------------------------DATAԜ# SWF ConstantsDATA@# -------------------------------------------------------------DATALSOLID_FILL = 0DATAՌLINEAR_GRADIENT_FILL = 16DATARADIAL_GRADIENT_FILL = 18DATA,TILED_BITMAP_FILL = 64DATAlCLIPPED_BITMAP_FILL = 65DATAּDATA#Place Object FlagsDATA,PO_NAME = 32DATAlPO_RATIO = 16DATA׬PO_COLOR_TRANS = 8DATAPO_MATRIX = 4DATA,PO_CHAR_ID = 2DATA lPO_MOVE = 1DATAج#Shape Object FlagsDATA SH_MOVE = 1DATA,SH_FILL0 = 2DATAlSH_FILL1 = 4DATA٬SH_LINESTYLE = 8DATASH_NEWSTYLES = 16DATA,#Button state flagsDATA lBT_HIT = 8DATA ڬBT_DOWN = 4DATA BT_OVER = 2DATA ,BT_UP = 1DATA0l#Buttons State transitions triggering actionsDATABT_IDLE_TO_OVERUP = 1DATA BT_OVERUP_TO_IDLE = 2DATALBT_OVERUP_TO_OVERDOWN = 4DATAܜBT_OVERDOWN_TO_OVERUP = 8DATABT_OVERDOWN_TO_OUTDOWN = 16DATA<BT_OUTDOWN_TO_OVERDOWN = 32DATA݌BT_OUTDOWN_TO_IDLE = 64DATABT_IDLE_TO_OVERDOWN = 128DATABT_OVERDOWN_TO_IDLE = 256DATA l#Font FlagsDATAެFONT_HASLAYOUT = 128 DATAFONT_SHIFTJIS = 64DATA,FONT_UNICODE = 32 DATAlFONT_ANSI = 16 DATA߬FONT_WIDEOFFSETS = 8DATAFONT_WIDECODES = 4DATA,FONT_ITALIC = 2DATAlFONT_BOLD = 1DATA #Text FlagsDATATEXT_HASFONT = 8DATA,TEXT_HASCOLOR = 4DATAlTEXT_HASYOFFSET = 2DATATEXT_HASXOFFSET = 1DATADATA@# -------------------------------------------------------------DATA# Basic Data TypesDATA@# -------------------------------------------------------------DATA<DATAldef UI8(val):DATA return chr(val)DATADATAdef UI16(val):DATA \ """Return in little-endian"""DATA$ return chr(val%256),chr(val/256)DATADATA,def UI32(val):DATA l """Return in little-endian"""DATA hi = UI16(val%65536)DATA lo = UI16(val/65536)DATA < return hi[0],hi[1],lo[0],lo[1]DATADATAdef REVUI32(v):DATA h2 = ord(v[0])DATA< h1 = ord(v[1])DATA| l2 = ord(v[2])DATA l1 = ord(v[3]) DATA0 return (((l1*256) + l2)*65536)+((h1*256) + h2)DATA\DATAdef UB(val,size=0):DATA v = GetBinary(val)DATA  z = size - len(v)DATA L if z>0:DATA r = Pad0(z)DATA r.extend(v)DATA   return rDATAL else:DATA| return v DATADATAdef SB(val,size=0):DATA , if val>=0:DATAl r=[0]DATA  r.extend(GetBinary(abs(val)))DATA else: DATA r=[1]DATA(L r.extend(TwosComplement(abs(val)))DATA z = size - len(r)DATA  if z>0:DATA if (val<0): v = Pad1(z)DATAl else: v = Pad0(z)DATA v.extend(r)DATA  return vDATA, else:DATA \ return rDATADATAdef SI16(val):DATA  r = GetChars(SB(val,16))DATA\ return r[1],r[0]DATADATAdef SI32(val):DATA  r = GetChars(SB(val,32))DATA\ return r[3],r[2],r[1],r[0]DATA DATAdef FB(val,size=0):DATA midpos = 512DATA\ maxbits= 1024DATA if val>=0: r=[0]DATA else: r=[1] DATA DATAL #Create bit listDATA Bits = Pad0(maxbits)DATA num = abs(val)DATA DATA< #Get integer partDATA| intnum = abs(int(num))DATADATA #Get decimal partDATA, decnum = num - intnumDATAlDATA0 # Get binary representation of integer partDATA idxI = midposDATA(< while (((intnum/2)!=0) and (idxI>=0)):DATA # Get modulusDATA Bits[idxI] = intnum % 2 DATA  intnum/=2DATA \ idxI-=1DATA  if (intnum==1): Bits[idxI]=1DATA else: Bits[idxI]=0DATA,DATA0\ # Get binary representation of decimal partDATA idxD = midpos+1DATA( while (decnum>0.0 and idxD=1):DATA Bits[idxD] = 1DATA  decnum-=1.0DATAL else:DATA| Bits[idxD] = 0DATA  idxD+=1DATADATA , i = idxIDATAl while (i<=midpos):DATA r.extend([Bits[i]])DATA i+=1DATA i = 1DATAL while (i<=16):DATA  r.extend([Bits[i+midpos]])DATA i+=1DATA  DATA< z = size - len(r)DATA | if z>0:DATA if (val<0): v = Pad1(z)DATA  else: v = Pad0(z)DATAL v.extend(r)DATA  return vDATA else:DATA  return rDATA<DATAldef IEEE_FIXED(val):DATA< """This returns a memory representation of a float pointDATAD according to the IEEE 32 bits flotating point representation.DATA +- 1.x * 2^eDATA  where x is the matissa fieldDATA, and e is the bias exponent (bias = 127)DATA| DATA8 Memory out put: Bit 3 3222222 222211111111110000000000DATA,  1 0987654 321098765432109876543210DATAl Sign Bias MatissaDATA exponent """DATA  midpos = 512DATAL maxbits= 1024DATADATA #Create bit listDATA Bits = Pad0(maxbits)DATA< num = abs(val)DATA|DATA #Get integer partDATA intnum = int(num)DATA,DATA\ #Get decimal partDATA decnum = num - intnumDATADATA0  # Get binary representation of integer partDATAl idxI = midposDATA( while (((intnum/2)!=0) and (idxI>=0)):DATA # Get modulusDATA< Bits[idxI] = intnum % 2 DATA  intnum/=2DATA  idxI-=1DATA   if (intnum==1): Bits[idxI]=1DATA\ else: Bits[idxI]=0DATADATA0 # Get binary representation of decimal partDATA, idxD = midpos+1DATA(l while (decnum>0.0 and idxD=1):DATA < Bits[idxD] = 1DATA | decnum-=1.0DATA  else:DATA  Bits[idxD] = 0DATA  , idxD+=1DATA lDATA  #Get exponentDATA   idx = 0DATA4  while ((idx> 1)DATA  | j = (midpos+1+(-1*exponent))DATA  k = 1DATA  l = 1DATA , byte = 0 DATAl for i in range(j,j+23):DATA  byte += Bits[i] * (2**(7-k)) DATA  k+=1DATA < if k>7:DATA| bytes[l]=byteDATA  byte = 0DATA  k = 0DATA< l+=1DATA,l bytes[1] += ((biasExponent << 7) & 128)DATA$ # Return value in little-endianDATAD return [chr(bytes[3]),chr(bytes[2]),chr(bytes[1]),chr(bytes[0])] DATADATAdef FIXED(val):DATA midpos = 512DATA< maxbits= 1024DATA| if val>=0: r=[0]DATA else: r=[1] DATA DATA, #Create bit listDATAl Bits = Pad0(maxbits)DATA num = abs(val)DATADATA #Get integer partDATA\ intnum = abs(int(num))DATADATA #Get decimal partDATA  decnum = num - intnumDATALDATA0| # Get binary representation of integer partDATA idxI = midposDATA( while (((intnum/2)!=0) and (idxI>=0)):DATAl # Get modulusDATA Bits[idxI] = intnum % 2 DATA  intnum/=2DATA < idxI-=1DATA | if (intnum==1): Bits[idxI]=1DATA else: Bits[idxI]=0DATA DATA0< # Get binary representation of decimal partDATA idxD = midpos+1DATA( while (decnum>0.0 and idxD=1):DATA Bits[idxD] = 1DATA decnum-=1.0DATA, else:DATA\ Bits[idxD] = 0DATA  idxD+=1DATA for i in range(31):DATA  r.extend([Bits[midpos-14+i]])DATA(l return r[24:]+r[16:24]+r[8:16]+r[0:8]DATADATAdef RECT(x0,y0,x1,y1):DATA(, #Convert values from pixels to TWIPSDATA| xmin =x0*20DATA xmax =x1*20DATA ymin =y0*20DATA< ymax =y1*20DATA| #Number of bits per valueDATA4 nbits = NBits(SB(MaxAbs([xmin,xmax,ymin,ymax])))DATA, #Create struct RECTDATAl r = []DATA r = UB(nbits,5)DATA r.extend(SB(xmin,nbits))DATA, r.extend(SB(xmax,nbits))DATA| r.extend(SB(ymin,nbits))DATA r.extend(SB(ymax,nbits))DATA   return rDATA \DATA$ def MATRIX(sx,sy,rot0,rot1,tx,ty):DATA  r = []DATA!  hasscale = 0DATA!L hasrotate = 0DATA(! if (sx!=1.0 or sy!=1.0): hasscale = 1DATA,! if (rot0!=0.0 or rot1!=0.0): hasrotate = 1DATA"< r = [hasscale]DATA"| if (hasscale==1):DATA," nScaleBits =NBits(FB(MaxAbs([sx,sy])))DATA # r.extend(UB(nScaleBits,5))DATA #l r.extend(FB(sx,nScaleBits))DATA # r.extend(FB(sy,nScaleBits))DATA$  r.extend([hasrotate])DATA$L if (hasrotate==1):DATA0$ nRotateBits = NBits(FB(MaxAbs([rot0,rot1])))DATA $ r.extend(UB(nRotateBits,5))DATA$%< r.extend(FB(rot0,nRotateBits))DATA$% r.extend(FB(rot1,nRotateBits))DATA0% nTranslateBits = NBits(SB(MaxAbs([tx,ty])))DATA &< r.extend(UB(nTranslateBits,5))DATA$& r.extend(SB(tx,nTranslateBits))DATA$& r.extend(SB(ty,nTranslateBits))DATA ', return rDATA'lDATA'def RGB(r,g,b):DATA ' return [chr(r),chr(g),chr(b)]DATA(,DATA(\def RGBn(r,g,b):DATA,( return [chr(r*255),chr(g*255),chr(b*255)] DATA(DATA),def RGBA(r,g,b,a):DATA()l return [chr(r),chr(g),chr(b),chr(a)]DATA)DATA)def RGBAn(r,g,b,a):DATA8*, return [chr(r*255),chr(g*255),chr(b*255),chr(a*255)]DATA* DATA,*def CXFORM(rmul,gmul,bmul,radd,gadd,badd):DATA+ hasmult = 0DATA +\ hasadd = 0DATA4+ if (rmul!=0 or gmul!=0 or bmul!=0): hasmult = 1DATA0+ if (radd!=0 or gadd!=0 or badd!=0): hasadd = 1DATA,\ r = [hasadd,hasmult]DATA@, nbits = NBits(SB(MaxAbs([rmul,gmul,bmul,radd,gadd,badd])))DATA-  r.extend(UB(nbits,4))DATA-L if (hasmult>0):DATA- r.extend(SB(rmul,nbits))DATA- r.extend(SB(gmul,nbits))DATA., r.extend(SB(bmul,nbits))DATA.| if (hasadd>0):DATA. r.extend(SB(radd,nbits))DATA/  r.extend(SB(gadd,nbits))DATA/\ r.extend(SB(badd,nbits))DATA / return r DATA/DATA@0def CXFORMWITHALPHA(rmul,gmul,bmul,amul,radd,gadd,badd,aadd):DATA0 hasmult = 0DATA 0 hasadd = 0DATA<1  if (rmul!=0 or gmul!=0 or bmul!=0 or amul!=0): hasmult = 1DATA<1| if (radd!=0 or gadd!=0 or badd!=0 or aadd!=0): hasadd = 1DATA1 r = [hasadd,hasmult]DATAH2, nbits = NBits(SB(MaxAbs([rmul,gmul,bmul,amul,radd,gadd,badd,aadd])))DATA2 r.extend(UB(nbits,4))DATA2 if (hasmult>0):DATA3 r.extend(SB(rmul,nbits))DATA3l r.extend(SB(gmul,nbits))DATA3 r.extend(SB(bmul,nbits))DATA4  r.extend(SB(amul,nbits))DATA4\ if (hasadd>0):DATA4 r.extend(SB(radd,nbits))DATA4 r.extend(SB(gadd,nbits))DATA5< r.extend(SB(badd,nbits))DATA5 r.extend(SB(aadd,nbits))DATA 5 return rDATA6DATA6Ldef STRING(s):DATA6 r = []DATA(6 for i in range(len(s)): r.append(s[i])DATA7  r.append(chr(0))DATA 7L return rDATA7DATA@7# -------------------------------------------------------------DATA8,# Core Data TypesDATA@8l# -------------------------------------------------------------DATA 8def GRADRECORD(ratio,color):DATA9, r = [chr(ratio)]DATA9l if (len(color)>3):DATA89 r.extend(RGBA(color[0],color[1],color[2],color[3]))DATA:  else:DATA,:< r.extend(RGB(color[0],color[1],color[2]))DATA : return rDATA:DATA$; def GRADIENT(NumGradients,records):DATA;\ r = [chr(NumGradients)]DATA; for i in records:DATA; r.extend(i)DATA <, return r DATA3:DATA<= r.extend(RGBA(param1[0],param1[1],param1[2],param1[3]))DATA>, else:DATA0>\ r.extend(RGB(param1[0],param1[1],param1[2]))DATAH> elif (type == LINEAR_GRADIENT_FILL or type == RADIAL_GRADIENT_FILL):DATA\?, r.extend(PadChars(MATRIX(param1[0],param1[1],param1[2],param1[3],param1[4],param1[5])))DATA,? r.extend(GRADIENT(param2[0],param2[1]))DATAD@ elif (type == TILED_BITMAP_FILL or type == CLIPPED_BITMAP_FILL):DATA@ r.extend(UI16(param1))DATA\@ r.extend(PadChars(MATRIX(param2[0],param2[1],param2[2],param2[3],param2[4],param2[5])))DATA Al return rDATAADATA Adef FILLSTYLEARRAY(fillstyles):DATAB, count = len(fillstyles)DATAB| r = []DATAB if count>=255:DATAB r = [UI16(count)]DATAC, else:DATAC\ r.extend(UI8(count))DATAC for i in fillstyles:DATAC r.extend(i)DATA D return rDATAD\DATADdef LINESTYLE(width,color):DATAD # Width in TWIPSDATAE w = UI16(width*10)DATAE\ r = [w[0],w[1]]DATAE # Color valueDATAE if (len(color)>3):DATA8F r.extend(RGBA(color[0],color[1],color[2],color[3]))DATAF| else:DATA,F r.extend(RGB(color[0],color[1],color[2]))DATA G  return rDATAGL DATA G|def LINESTYLEARRAY(linestyles):DATAG count = len(linestyles)DATAH r = []DATA(HL if count>255: r.extend(UI16(count))DATAH else: r.extend(UI8(count))DATAH for i in linestyles:DATAI, r.extend(i)DATA Il return rDATAIDATALIdef CURVEEDGERECORD(ControlDeltaX,ControlDeltaY,AnchorDeltaX,AnchorDeltaY):DATA@J\ """SWF uses Quadratic Bezier curves, they need only 3 points:DATA$J - 2 on-curve anchor points, and DATA K 1 off-curve control point.DATA@Kl So, the first anchor point is the current drawing position,DATALK the control point is the current drawing position plus the ControlDeltaDATA\L\ the last anchor point is the current drawing position plus ControlDelta plus AnchorDeltaDATAL Parameters:DATAHM, ControlDeltaX, ControlDeltaY, LastAnchorDeltaX, LastAnchorDeltaY."""DATAM r = [1,0] # Curved EdgeDATA`M nbits = NBits(SB(MaxAbs([ControlDeltaX*20,ControlDeltaY*20,AnchorDeltaX*20,AnchorDeltaY*20])))DATADN| r.extend(UB(nbits-2,4)) # Nbits is biased by 2 in the swf readerDATA@N r.extend(SB(ControlDeltaX*20,nbits)) # X Control point changeDATA@O\ r.extend(SB(ControlDeltaY*20,nbits)) # Y Control point changeDATA@O r.extend(SB(AnchorDeltaX*20,nbits)) # X anchor point changeDATA@P< r.extend(SB(AnchorDeltaY*20,nbits)) # Y anchor point changeDATA P return rDATAPDATA<Qdef LINEEDGERECORD(DeltaX,DeltaY,lineflag=1,vertflag=0):DATA(Q """ Parameters: Delta X - Position XDATAQ Delta Y - Position YDATA4R, Line Flag - 1 General Line (Default option)DATA(R DeltaX and DeltaY are used.DATA(R Vert Flag parameter not usedDATA(S, 0 Vertical or Hotizontal LinesDATA4S| Vert Flag - 0 Horizontal Line Only DeltaX usedDATA,S 1 Vertical line only DeltaY usedDATAT< """DATATl r = [1,1] #Straight EdgeDATA4T nbits = NBits(SB(MaxAbs([DeltaX*20,DeltaY*20])))DATAU r.extend(UB(nbits-2,4))DATAUl r.extend([lineflag])DATALU if lineflag==1: # Save General Lines #Nbits are biased by 2 in swf readerDATA V, r.extend(SB(DeltaX*20,nbits))DATA V| r.extend(SB(DeltaY*20,nbits))DATAV else:DATAV r.extend([vertflag])DATA4W< if vertflag == 0: r.extend(SB(DeltaX*20,nbits))DATA(W else: r.extend(SB(DeltaY*20,nbits)) DATA W return rDATAX, DATAX\DATAXdef ENDSHAPERECORD():DATAX return [0,0,0,0,0,0]DATAY DATAY<def STYLESHAPERECORD(f,DeltaX=0,DeltaY=0,Fill0Style=0,Fill1Style=0,LineStyle=0,nfbits=1,nlbits=1,FillArr=[],LineArr=[],sizepad=0):DATA8Y # Defines changes in line style, fill style, positionDATAZL flags = GetBinary(f,5)DATA Z r = [0]DATAZ r.extend(flags)DATA[  if flags[4]==1:DATA8[L MoveBits = NBits(SB(MaxAbs([DeltaX*20,DeltaY*20])))DATA[ r.extend(UB(MoveBits,5))DATAX[ r.extend(SB(DeltaX*20,MoveBits)) # Move x converted to TWIPS (1 TWIP = 1 Pixel * 20 )DATA,\| r.extend(SB(DeltaY*20,MoveBits)) # Move yDATA,\ if flags[3]==1: # StateFillStyle0DATA0]< r.extend(UB(Fill0Style,nfbits)) #Fill 0 styleDATA] if flags[2]==1:DATA0] r.extend(UB(Fill1Style,nfbits)) #Fill 1 styleDATA^< if flags[1]==1:DATA0^| r.extend(UB(LineStyle,nlbits)) #Line styleDATA^ if flags[0]== 1:DATA$_ r.extend(Padding(sizepad+len(r)))DATA_l nfill = ord(FillArr[0])DATA,_ for i in FillArr: # FillStylesArrayDATA$` r.extend(GetBinary(ord(i),8))DATA`l nline = ord(LineArr[0])DATA,` for i in LineArr: # LineStylesArrayDATA$a r.extend(GetBinary(ord(i),8))DATA,al r.extend(UB(NBits(GetBinary(nfill)),4))DATA,a r.extend(UB(NBits(GetBinary(nline)),4))DATA b, return rDATAblDATA(bdef SHAPE(records,nfbits=15,nlbits=15):DATAb r = UB(nfbits,4)DATAc, r.extend(UB(nlbits,4))DATA cl for i in records: r.extend(i)DATA c return rDATAcDATAPd,def SHAPEWITHSTYLE(fillstylesarr,linestylesarr,records,nfbits=15,nlbits=15):DATAd r = []DATAd r.extend(fillstylesarr)DATAe, r.extend(linestylesarr)DATA4e| r.extend([chr(((nfbits << 4) + nlbits) & 255)])DATA e for i in records: r.extend(i)DATA f, return r DATAflDATAHfdef BUTTONRECORD(flags,characterID,layer,matrix,ColorTransform=None):DATAg  r = []DATAg< r.extend(flags)DATA g| r.extend(UI16(characterID))DATAg r.extend(UI16(layer))DATAh  r.extend(PadChars(matrix))DATAh\ if ColorTransform!=None:DATA(h r.extend(PadChars(ColorTransform))DATA h return rDATAi<DATA4ildef KERNINGRECORD(wideflag,Code1,Code2,Adjustment):DATAi r = []DATAi if wideflag == 1:DATAj< r.extend(UI16(Code1))DATAj| r.extend(UI16(Code2))DATAj else:DATAj r.extend(chr(Code1))DATAk, r.extend(chr(Code2))DATAkl r.extend(SI16(Adjustment))DATA k return rDATAk DATA@l,# -------------------------------------------------------------DATAl# SWF File Tags HeadersDATA@l# -------------------------------------------------------------DATAmLDATAm|def swfWrite(name,buf):DATA m ans = 0DATAm try:DATAn, f = open(name,'wb')DATAnl for byte in buf:DATAn f.write(byte)DATA n f.close()DATA$o, except IOError, (errno,strerror):DATA0o| print "I/O Error(%s):%s" % (errno,strerror)DATA o ans = 1DATA p return ansDATAp\DATA@pdef swfHeaderBlock(filelength,framesize,framerate,framecount):DATAp """Header Block:DATAq< Signature 'F' 1 byteDATAq| 'W' 1 byteDATAq 'S' 1 byteDATAq Version 1 byteDATAr< File length 4 bytesDATAr Frame size 5 bytesDATAr Frame rate 2 bytesDATA s, Frame count 2 bytes"""DATAs| #Initialize DATAs buf = ['F','W','S',chr(3)]DATAt  #FileLengthDATA tL buf.extend(UI32(filelength))DATAt #Frame SizeDATATt buf.extend(PadChars(RECT(framesize[0],framesize[1],framesize[2],framesize[3])))DATAu\ #Frame rateDATAu fr = UI16(framerate)DATAu buf.extend(fr[1])DATAv buf.extend(fr[0])DATAv\ #Frame countDATAv fr = UI16(framecount)DATAv buf.extend(fr)DATAw # Return the bufferDATA w\ return bufDATAw DATA wdef swfTagHeader(tag,length):DATAx r = []DATAxL if (length<=62):DATAx #Short HeaderDATAx n = (tag << 6) + lengthDATAy r.extend(UI16(n))DATAy\ else:DATAy #Long HeaderDATAy n = (tag << 6) + 63DATAz  r.extend(UI16(n))DATAzL r.extend(UI32(length))DATA z return rDATAzDATA@{ # -------------------------------------------------------------DATA{|# SWF File TagsDATA<{# There are two categories of tags: definition and controlDATA8|,# Definition tags manage a dictionary of resources. DATA<|# Control tags control the display list and enable actions.DATA|#DATA<},# CAUTION: Not all the tags were defined in this programDATA<}# because I only use a base set of SWF tags to be able toDATA ~ # export blender animations.DATA@~\# -------------------------------------------------------------DATA~DATA@~# -------------------------------------------------------------DATAl# Control TagsDATA# - Control:DATA# SetBackgroundColorDATAˀ,# Protect DATAˀl# FrameLabelDATAˀ# StartSoundDATAˀ# EndDATAˁ# - Display List: DATAˁ\# PlaceObjectDATAˁ# PlaceObject2DATAˁ# RemoveObjectDATA˂# RemoveObject2DATA˂\# ShowFrameDATA˂# - ActionsDATA˂# DoActionDATA@˃# -------------------------------------------------------------DATAD˃def swfPlaceObject(characterId,depth,matrix,colortransform = None):DATA˃ size = 4 + len(matrix)DATA˄< if colortransform != None:DATA ˄ size+= len(colortransform)DATA˄ r = swfTagHeader(4,size)DATA ˅, r.extend(UI16(characterId))DATA˅| r.extend(UI16(depth))DATA˅ r.extend(PadChars(matrix))DATA@ˆ  if colortransform !=None: r.extend(PadChars(colortransform))DATA ˆ| return rDATAˆDATA$ˆdef swfPlaceObject2(f,depth,param):DATAˇ< flags = GetBinary(f,6)DATA ˇ| size = 3 DATA ˇ if flags[0] == 1: #Has nameDATAˈ  name = STRING(param[0])DATAˈ\ size+=len(name)DATA ˈ if flags[1] == 1: #Has ratioDATAˈ ratio = UI16(param[1])DATA ˉ< size+=2DATA(ˉ| if flags[2] == 1: #Has color transformDATAlˉ colortrans = PadChars(CXFORM(param[2][0],param[2][1],param[2][2],param[2][3],param[2][4],param[2][5]))DATAˊl size+= len(colortrans)DATA ˊ if flags[3] == 1: #Has matrixDATAhˋ  matrix = PadChars(MATRIX(param[3][0],param[3][1],param[3][2],param[3][3],param[3][4],param[3][5]))DATAˋ size+= len(matrix)DATA,ˋ if flags[4] == 1: #Has place a characterDATA ˌ< character = UI16(param[4])DATA ˌ size+=2DATAˌ if flags[5] == 1: #MoveDATA ˍ passDATAˍ\ r = swfTagHeader(26,size)DATA ˍ bits = [0,0] # Reserved flagsDATAˍ bits.extend(flags)DATAˎ< r.extend(GetChars(bits))DATAˎ r.extend(UI16(depth))DATA(ˎ if (flags[4]==1): r.extend(character)DATA$ˏ if (flags[3]==1): r.extend(matrix)DATA(ˏl if (flags[2]==1): r.extend(colortrans)DATA$ˏ if (flags[1]==1): r.extend(ratio)DATA$ː  if (flags[0]==1): r.extend(name)DATA ː\ return rDATAːDATA ːdef swfRemoveObject(id,depth):DATAˑ r = swfTagHeader(5,4)DATAˑ\ r.extend(UI16(id))DATAˑ r.extend(UI16(depth))DATA ˑ return rDATA˒DATA ˒Ldef swfRemoveObject2(depth):DATA˒ r = swfTagHeader(28,2)DATA˒ r.extend(UI16(depth))DATA ˓ return rDATA˓\DATA˓def swfShowFrame():DATA@˓ """Flag the end of the current frame. During playback, the DATA@˔< characters present in the display list will be rendered andDATA<˔ the mouvie paused for the duration of a single frame."""DATA˕ return swfTagHeader(1,0)DATA˕lDATA$˕def swfSetBackgroundColor(r,g,b):DATA@˕ """ Set the background color of the display Tag ID = 9 """DATA(˖\ return swfTagHeader(9,3) + RGB(r,g,b)DATA˖DATA˖def swfFrameLabel(label):DATA˗, str = STRING(label)DATA ˗l r = swfTagHeader(43,len(str))DATA˗ r.extend(str)DATA ˗ return rDATA˘<DATA˘ldef swfProtect():DATAL˘ """ Marks a file as not importable for editing in the authoring tool."""DATA˙, return swfTagHeader(24,0)DATA˙|DATA$˙def swfStartSound(id,soundinfo):DATA,˙ """Start playing the sound character"""DATA˚\ size = 2 + len(soundinfo)DATA˚ r = swfTagHeader(15,size)DATA˚ r.extend(UI16(id))DATA˛< r.extend(soundinfo)DATA ˛| return rDATA˛DATA˛def swfEnd():DATAD˜, """Marks the end of a file. This should always be the last tag DATA˜ in the file."""DATA˜ return swfTagHeader(0,0) DATA˝,DATA˝\DATA@˝# -------------------------------------------------------------DATA˝# Action TagsDATA@˞<# -------------------------------------------------------------DATA ˞def swfActionGotoFrame(frame):DATA˞ r = [chr(129)]DATA˟< r.extend(UI16(2))DATA˟| r.extend(UI16(frame))DATA ˟ return rDATA˟DATA$ˠ,def swfActionGetURL(url,window):DATAˠ| r = [chr(131)]DATAˠ us = STRING(url)DATAˠ uw = STRING(window)DATA$ˡ< r.extend(UI16(len(us)+len(uw)))DATAˡ r.extend(us)DATAˡ r.extend(uw)DATA ˢ  return rDATAˢLDATAˢ|def swfActionNextFrame():DATAˢ return [chr(4)]DATAˣ DATAˣ<def swfActionPrevFrame():DATAˣ return [chr(5)]DATAˣDATAˣdef swfActionPlay():DATAˤ< return [chr(6)]DATAˤ|DATAˤdef swfActionStop():DATAˤ return [chr(7)]DATA˥,DATA ˥\def swfActionToggleQualty():DATA˥ return [chr(8)]DATA˥DATA˦def swfActionStopSounds():DATA˦l return [chr(9)]DATA˦DATA,˦def swfActionWaitForFrame(frame,skipcount):DATA˧< r = [chr(138)]DATA˧| r.extend(UI16(3))DATA˧ r.extend(UI16(frame))DATA˧ r.extend([chr(skipcount)])DATA ˨L return rDATA˨DATA,˨def swfActionSetTarget(length,targetname):DATA˩ r = [chr(139)]DATA˩\ r.extend(UI16(length))DATA˩ tn = STRING(targetname)DATA˩ r.extend(tn)DATA ˪, return rDATA˪lDATA(˪def swfActionGoToLabel(length,label):DATA˪ r = [chr(140)]DATA˫, r.extend(UI16(length))DATA˫l tn = STRING(label)DATA˫ r.extend(tn)DATA ˫ return rDATAˬ, DATA ˬ\def swfDoAction(actionlist):DATA(ˬ r = swfTagHeader(12,len(actionlist)+1)DATA,ˬ if len(actionlist)>0: r.extend(actionlist)DATA˭\ r.extend([chr(0)])DATA ˭ return rDATA@˭# -------------------------------------------------------------DATAˮL# Definition TagsDATAˮ# - DefineShapeDATAˮ# - DefineShape2DATA˯ # - DefineShape3DATA˯L# - DefineSprite (SWF 3.0)DATA˯# - DefineBitsDATA˯# - DefineButtonDATA˰# - DefineButton2DATA˰\# - DefineButtonCxformDATA@˰# -------------------------------------------------------------DATA,˱ def swfDefineShape(id,rect,shapewithstyle):DATA<˱l """ Defines a vector shape object. The shape definitionDATA<˱ is a full-length encoded list of bezier curve informationDATA,˲L line styles and fill styles. (SWF 1.0)"""DATA˲ c = PadChars(rect)DATA(˲ size = len(c) + len(shapewithstyle)DATA˳< r = swfTagHeader(2,size+2)DATA˳ r.extend(UI16(id))DATA˳ r.extend(c)DATA˴  r.extend(shapewithstyle)DATA ˴\ return rDATA˴DATA0˴def swfDefineShape2(id,rect,shapewithstyle):DATA@˵, """Extends the capabilities of DefineShape with the abilityDATA@˵ to support more than 255 styles in the style list and multipleDATA0˶  style lists in a single shape (SWF 2.0) """DATA˶l c = PadChars(rect)DATA ˶ size = len(c) + len(shapeinfo)DATA ˶ r = swfTagHeader(22,size+2)DATA˷L r.extend(UI16(id))DATA˷ r.extend(c)DATA˷ r.extend(shapewithstyle)DATA ˸ return rDATA˸\DATA0˸def swfDefineShape3(id,rect,shapewithstyle):DATA4˸ """Extends the capabilitys of the DefineShape2 DATA8˹L by extending all of the RGB color fields to supportDATA,˹ RGBA with alpha transparency (SWF 3.0)"""DATA˺  c = PadChars(rect)DATA(˺L size = len(c) + len(shapewithstyle)DATA ˺ r = swfTagHeader(32,size+2)DATA˺ r.extend(UI16(id))DATA˻, r.extend(c)DATA˻l r.extend(shapewithstyle)DATA ˻ return rDATA˻DATA,˼,def swfDefineSprite(id,numframes,movie):DATA˼ size = len(movie) + 4DATA˼ r = swfTagHeader(39,size)DATA˽ r.extend(UI16(id))DATA˽\ r.extend(UI16(numframes))DATA˽ r.extend(movie)DATA ˽ return rDATA˾,DATA˾\def swfDefineBits(id,jpeg):DATA8˾ """Define a Bitmap character with JPEG compression."""DATA˿  size = len(jpeg) + 2DATA˿L r = swfTagHeader(6,size)DATA˿ r.extend(UI16(id))DATA˿ r.extend(jpeg)DATA  return rDATA\DATA$def JPEGTables(jpegencodingtable):DATA8 """Defines the JPEG encoding table for the JPEG imagesDATA,< defined using the DefineBits records."""DATA  size = len(jpegencodingtable)DATA r = swfTagHeader(8,size)DATA < r.extend(jpegencodingtable)DATA Œ return rDATADATA4def swfDefineBitsJPEG2(id,jpeg,jpegencodingtable):DATA@\ """Define a Bitmap character with JPEG compression. This tagDATA@ differs from DefineBits in that the record contains both JPEGDATA<< encoding table and image data. This record allows multipleDATADĬ JPEGs with different compression rations inside a single SWF file.DATAD The JPEG encoding and image data contained here are two separateDATAŌ JPEG streams.DATAD Important NOTE: Each JPEG stream begins with the tag (0xFF,0xD8)DATA<< and a end of tream tag (0xFF,0xD9). This differs from the DATADƬ standard JPEG file that combines the image and the encoding dataDATA into the same stream"""DATA0l size = len(jpeg) + len(jpegencodingtable) + 2DATA r = swfTagHeader(21,size)DATA r.extend(UI16(id))DATA \ r.extend(jpegencodingtable)DATAȬ r.extend(jpeg)DATA  return rDATA,DATA0\def swfDefineButton(id,buttonrecords,actions):DATA<ɼ """Define a button character. A button is defined by an DATA@, up image, mouse over image, depressed image and a hit region.DATADʜ There is also a list of actions to take when the button is clickedDATA  and released."""DATA0L size = 2 + len(buttonrecords) + len(actions)DATAˬ r = swfTagHeader(7,size)DATA r.extend(UI16(id))DATA< r.extend(buttonrecords)DATA0̌ r.extend([chr(0)]) # Button End Flag always 0DATA r.extend(actions)DATA0, r.extend([chr(0)]) # Actions End Flag always 0DATA ͌ return rDATADATA$def ACTCONDITIONLST(actconditions):DATAL r = []DATA | offset = 0DATAμ for act in actconditions:DATA  r.extend(UI16(offset))DATA\ r.extend(act)DATAϜ offset += len(act)DATA  return rDATADATA$Ldef ACTCONDITION(flags,actions):DATAМ r = UI16(flags)DATA r.extend(actions)DATA0 r.extend([chr(0)]) #Actions End Flag always 0DATA| returnDATAѬDATA DATA@ def swfDefineButton2(id,flags,buttonrecords,actconditionlst):DATA<| """Define a button character. A button is defined by an DATA@ up image, mouse over image, depressed image and a hit region.DATA@\ You can also specif the color transformation and sound data.DATAD There is also a list of actions to take when the button is clickedDATA < and released. (SWF 3.0) """ DATA8Ԍ size = 3 + len(buttonrecords) + len(actconditionlst)DATA r = swfTagHeader(34,size)DATA< r.extend(UI16(id))DATA,| r.extend([chr(flags)]) # flags = 0 or 1DATAP r.extend(buttonrecords) # This records has to have COLORTRANSFORM with ALPHADATA0\ r.extend([chr(0)]) # Button End Flag always 0DATA ּ r.extend(actionsconditions)DATA   return rDATALDATA0|def swfDefineButtonCxform(id,colortransform):DATA  size = 2 + len(colortransform)DATA, r = swfTagHeader(23,size)DATA| r.extend(UI16(id))DATAؼ r.extend(colortransform)DATA   return rDATALDATA<|# ------------------------------------------------------DATA# Fonts and TextDATA<,# ------------------------------------------------------DATAڜDATA0def swfDefineFont(id,OffsetTable,ShapeTable):DATA0, size = 2 + len(OffsetTable)+ len(ShapeTable)DATAی r = swfTagHeader(10,size)DATA r.extend(UI16(id))DATA4 for offset in OffsetTable: r.extend(UI16(offset))DATA,| for shape in ShapeTable: r.extend(shape)DATA  return rDATADATA\Ldef swfDefineFont2(id,FontFlags,Fontname,OffsetTable,ShapeTable,FontCodeTable,Layout=None):DATA """DATA  Id - Object IdDATAL DATA| FontFlags:DATAT޼ FONT_HASLAYOUT - FontFlagsHasLayout UB[1]: Has font metrics/layout informationDATA@< FONT_SHIFTJIS - FontFlagsShiftJIS UB[1]: ShiftJIS encodingDATA@߬ FONT_UNICODE - FontFlagsUnicode UB[1]: Unicode encodingDATA8 FONT_ANSI - FontFlagsAnsi UB[1]: ANSI encodingDATAL| FONT_WIDEOFFSETS- FontFlagsWideOffsets UB[1]: if 1, uses 32 bit offsetsDATAL FONT_WIDECODES - FontFlagsWideCodes UB[1]: If 1 fonts uses 16-bit codesDATA$| o uses 8 bit codes.DATA8 FONT_ITALIC - FontFlagsItalic UB[1]: Italic FontDATA4, FONT_BOLD - FontFlagsBold UB[1]: Bold FontDATA  Fontname - String font nameDATA< Offset Table - Beginnig of next shape in the Shape TableDATA<L Shape Table - List of ShapeObjects that define each glyphDATA( FontCodeTable- Table of font codesDATA   Layout:DATAL [FontAscent,FontDescent,FontLeading,[{FontAdvanceTable } list],[{FontBoundsTable } list ],[Kerning list]]DATA  DATA< """DATA l flags = GetBinary(FontFlags)DATADATA  r = [] DATA, r.extend(UI16(id))DATA,l r.extend(chr(0)) # FontFlagsReserved UB[8]DATA r.extend(chr(FontFlags))DATA name = STRING(Fontname) DATAl r.extend(chr(len(name)))DATA r.extend(name)DATA, r.extend(UI16(len(ShapeTable))) #nGlyphsDATA \ for offset in OffsetTable: DATA( if (flags[4]==1): # FONT_WIDEOFFSETS DATA r.extend(UI32(offset))DATA L else: r.extend(UI16(offset))DATA, for shape in ShapeTable: r.extend(shape)DATA for code in FontCodeTable:DATA(L if (flags[5]==1): # FONT_WIDECODESDATA r.extend(UI16(code))DATA else: r.extend(chr(code))DATA$, if (flags[0]==1): #FONT_HASLAYOUTDATA,| r.extend(SI16(LayOut[0])) #FontAscent DATA, r.extend(SI16(Layout[1])) #FontDescentDATA,< r.extend(SI16(Layout[2])) #FontLeadingDATA for glyph in Layout[3]:DATA, r.extend(SI16(glyph)) #FontAdvanceTableDATAL Bounds = []DATA@ for rect in Layout[4]: Bounds.extend(rect) #FontBoundsTableDATA  r.extend(PadChars(Bounds))DATA4L r.extend(UI16(len(Layout[5]))) #FontKerningCountDATA0 for kerning in Layout[5]: r.extend(kerning)DATA  DATA < r1 = swfTagHeader(48,len(r))DATA r1.extend(r)DATA  return r1DATA DATA<<def swfDefineFontInfo(FontId,Fontname,FontFlags,CodeTable):DATA """DATA Font Id - Id FontDATA Font name - string DATA\ FontFlags:DATA@ FONT_UNICODE - FontFlagsUnicode UB[1]: Unicode encodingDATA@  FONT_SHIFTJIS - FontFlagsShiftJIS UB[1]: ShiftJIS encodingDATA8| FONT_ANSI - FontFlagsAnsi UB[1]: ANSI encodingDATA8 FONT_ITALIC - FontFlagsItalic UB[1]: Italic FontDATA4< FONT_BOLD - FontFlagsBold UB[1]: Bold FontDATAL FONT_WIDECODES - FontFlagsWideCodes UB[1]: If 1 fonts uses 16-bit codesDATA$ o uses 8 bit codes.DATA l CodeTable - Glyph code table DATA """DATA r = []DATA r.extend(UI16(FontId))DATA\ name = STRING(Fontname)DATA r.extend(char(len(name)))DATA r.extend(name)DATA < flags = GetBinary[FontFlags]DATAH newflags = [0,0,flags[2],flags[1],flags[3],flags[6],flags[7],flags[5]]DATA  r.extend(GetChars(newflags))DATAL for glyphs in CodeTable:DATA, if (flags[7]==1): r.extend(UI16(glyphs))DATA  else: r.extend(chr(glyphs))DATALDATA | r1 = swfTagHeader(13,len(r))DATA r1.extend(r)DATA   return r1DATALDATA8|def GLYPHENTRY(idx,value,nGlyphBits=8,nAdvanceBits=8):DATA r = []DATA   r.extend(UB(idx,nGlyphBits))DATA$\ r.extend(UB(value,nAdvanceBits))DATA  return r DATADATA(def TEXTRECORDTYPE0(TextGplyphEntries):DATA l r = [0]DATA$ nglyphs = len(TextGplyphEntries)DATA r.extend(UB(nglyphs,7))DATA$L for glyph in TextGplyphEntries:DATA r.extend(glyph)DATA return PadChars(r)DATADATAHLdef TEXTRECORDTYPE1(TextFlags,Fontid=0,height=0,color=None,x=0,y=0):DATA f = [1,0,0,0]DATA f.extend(GetBinary(flags))DATAL r = GetChars(f)DATA( if (f[4]==1): r.extend(UI16(Fontid))DATA if (f[5]==1): DATA, if len(color)>3: r.extend(RGBA(color))DATA | else: r.extend(RGB(color))DATA$ if (f[7]==1): r.extend(UI16(x))DATA$ if (f[6]==1): r.extend(UI16(y))DATA(l if (f[4]==1): r.extend(UI16(height))DATA  return rDATADATAT,def swfDefineText(Textid,bounds,matrix,textrecords,nGlyphBits=8,nAdvanceBits=8):DATA r = []DATA r.extend(UI16(Textid))DATA a = []DATAL a.extend(bounds)DATA a.extend(matrix)DATA r.extend(PadChars(a))DATA  r.append(chr(nGlyphBits))DATA \ r.append(chr(nAdvanceBits))DATA0 for record in textrecords: r.extend(record)DATA  r.append(chr(0))DATA L r1 = swfTagHeader(11,len(r))DATA r1.extend(r)DATA  return r1DATADATATLdef swfDefineText2(Textid,bounds,matrix,textrecords,nGlyphBits=8,nAdvanceBits=8):DATA r = []DATA r.extend(UI16(Textid))DATA< a = []DATAl a.extend(bounds)DATA a.extend(matrix)DATA r.extend(PadChars(a))DATA, r.append(chr(nGlyphBits))DATA | r.append(chr(nAdvanceBits))DATA0 for record in textrecords: r.extend(record)DATA, r.append(chr(0))DATA l r1 = swfTagHeader(11,len(r))DATA r1.extend(r)DATA  return r1DATA <DATA< l# ------------------------------------------------------DATA # Blender SWF Wrap ClassesDATA< ,# ------------------------------------------------------DATA DATAD # --------------------------------------------------------------DATA <# DATA l# Class bShapeDATA # DATA@ # -------------------------------------------------------------DATA Lclass bShape:DATA  "Blender swf shape class"DATA  recbits = []DATA   fsa = []DATA  \ lsa = []DATA   nFills = 0DATA   nLines = 0DATA8 def __init__(self,fillstylearr=[],linestylearr=[]):DATA| "bShape initialization." DATA recbits = []DATA  fsa = fillstylearrDATAL lsa = linestylearrDATA$ def AddFillStyle(self,fillstyle):DATA  self.fsa.append(fillstyle)DATA, self.nFills+=1DATA$l def AddLineStyle(self,linestyle):DATA  self.lsa.append(linestyle)DATA  self.nLines+=1DATAL def MoveTo(self,x,y):DATA8 self.recbits.extend(STYLESHAPERECORD(SH_MOVE,x,y))DATA, def SetCurrentFill0(self,id,numfills=0):DATA`L if numfills>0: self.recbits.extend(STYLESHAPERECORD(SH_FILL0,0,0,id,0,0,NBits(UB(numfills))))DATA\ else: self.recbits.extend(STYLESHAPERECORD(SH_FILL0,0,0,id,0,0,NBits(UB(self.nFills))))DATA,l def SetCurrentFill1(self,id,numfills=0):DATA` if numfills>0: self.recbits.extend(STYLESHAPERECORD(SH_FILL1,0,0,0,id,0,NBits(UB(numfills))))DATA\\ else: self.recbits.extend(STYLESHAPERECORD(SH_FILL1,0,0,0,id,0,NBits(UB(self.nFills))))DATA, def SetCurrentLine(self,id,numlines=0):DATAhL if numlines>0: self.recbits.extend(STYLESHAPERECORD(SH_LINESTYLE,0,0,0,0,id,0,NBits(UB(numlines))))DATA` else: self.recbits.extend(STYLESHAPERECORD(SH_LINESTYLE,0,0,0,0,id,0,NBits(UB(self.nLines))))DATAHl def AddNewStyles(self,nfb=1,nlb=1,FillArr=[],LineArr=[],sizepad=0):DATAl self.recbits.extend(STYLESHAPERECORD(SH_NEWSTYLES,0,0,0,0,0,nfb,nlb,FillArr,LineArr,len(self.recbits)))DATA| def SetStyleRecord(self,f,DeltaX=0,DeltaY=0,Fill0Style=0,Fill1Style=0,LineStyle=0,nfbits=1,nlbits=1,FillArr=[],LineArr=[]):DATA, self.recbits.extend(STYLESHAPERECORD(f,DeltaX,DeltaY,Fill0Style,Fill1Style,LineStyle,nfbits,nlbits,FillArr,LineArr,len(self.recbits)))DATA def LineTo(self,x,y):DATA,, self.recbits.extend(LINEEDGERECORD(x,y))DATA  def CurveTo(self,cx,cy,ax,ay):DATA4 self.recbits.extend(CURVEEDGERECORD(cx,cy,ax,ay))DATA< def EndShape(self):DATA(| self.recbits.extend(ENDSHAPERECORD())DATA def GetShape(self):DATA(  nFillBits = NBits(UB(self.nFills))DATA(\ nLineBits = NBits(UB(self.nLines))DATAx return SHAPEWITHSTYLE(FILLSTYLEARRAY(self.fsa),LINESTYLEARRAY(self.lsa),PadChars(self.recbits),nFillBits,nLineBits)DATAL def Reset(self):DATA self.recbits = []DATA self.fsa = []DATA  self.lsa = []DATAL self.nFills = 0DATA self.nLines = 0DATADATAD# -----------------------------------------------------------------DATA l# Test SWFDATAD# -----------------------------------------------------------------DATA0#movie = swfHeaderBlock(0,[0,0,92,469],12,1)DATA,|#movie+=swfSetBackgroundColor(255,255,255)DATA#actions = swfActionStop()DATA  ,#movie+=swfDoAction(actions)DATA |#a = FILLSTYLEARRAY([FILLSTYLE(SOLID_FILL,[0,255,0,255]),FILLSTYLE(SOLID_FILL,[0,0,255,255]),FILLSTYLE(SOLID_FILL,[255,255,0,255])])DATAP!,#b = LINESTYLEARRAY([LINESTYLE(1,[0,0,0,255]),LINESTYLE(3,[0,255,255,255])])DATA!#nFillBits = NBits(UB(3)) DATA!#nLineBits = NBits(UB(2))DATA"L#sh = bShape()DATA8"#sh.AddFillStyle(FILLSTYLE(SOLID_FILL,[0,255,0,255]))DATA8"#sh.AddFillStyle(FILLSTYLE(SOLID_FILL,[0,0,255,255]))DATA8#L#sh.AddFillStyle(FILLSTYLE(SOLID_FILL,[255,255,0,255]))DATA,##sh.AddLineStyle(LINESTYLE(1,[0,0,0,255]))DATA0$ #sh.AddLineStyle(LINESTYLE(3,[0,255,255,255]))DATA\$l#sh.SetStyleRecord(SH_MOVE+SH_FILL0+SH_FILL1+SH_LINESTYLE,0,300,0,2,0,nFillBits,nLineBits)DATA$#sh.LineTo(0,100)DATA%<#sh.CurveTo(100,0,0,-100)DATA%#sh.LineTo(-100,0)DATAp%#sh.SetStyleRecord(SH_MOVE+SH_FILL0+SH_FILL1+SH_LINESTYLE+SH_NEWSTYLES,100,300,0,1,0,nFillBits,nLineBits,a,b)DATA&l#sh.LineTo(0,100)DATA&#sh.LineTo(100,0)DATA&#sh.LineTo(0,-100)DATA',#sh.LineTo(-100,0)DATA'l#sh.MoveTo(150,350)DATA'#sh.LineTo(25,0)DATA'#sh.LineTo(0,25)DATA(,#sh.LineTo(-25,0)DATA(l#sh.LineTo(0,-25)DATAP(#sh.SetStyleRecord(SH_MOVE+SH_FILL0+SH_FILL1,0,290,3,1,0,nFillBits,nLineBits)DATA),#sh.LineTo(0,50)DATA)l#sh.LineTo(50,0)DATA)#sh.LineTo(0,-50)DATA)#sh.MoveTo(100,290)DATA*,#sh.LineTo(0,50)DATA*l#sh.CurveTo(20,0,0,-50)DATA*#sh.LineTo(-50,0)DATA*#sh.MoveTo(200,290)DATA+,#sh.LineTo(0,50)DATA+l#sh.LineTo(50,0)DATA+#sh.LineTo(0,-50)DATA+#sh.LineTo(-50,0)DATA,,#sh.EndShape()DATA<,l#movie+=swfDefineShape3(1,RECT(0,0,400,400),sh.GetShape())DATAT,#movie+=swfPlaceObject2(PO_MATRIX+PO_CHAR_ID,2,[0,0,0,[1.0,1.0,0.0,0.0,0.0,0.0],1])DATA-\#movie+=swfShowFrame()DATA-#movie+=swfEnd()DATA-#a = len(movie)DATA.#SetFileLength(movie,a)DATA.\#print movieDATA$.#swfWrite('c:\swf\demo.swf',movie)DATA.#print "Saved!"DATA/, DATAD/\# --------------------------------------------------------------DATA/# DATA/# Class CRectDATA0<# DATA@0l# -------------------------------------------------------------DATA0class CRect:DATA81 """ CRect (Left,Top, Right, Bottom) Rectangle classDATA81| Remember that the position (0,0) correspond to theDATA$1 left-bottom of the screen. """DATA(2, def __init__(self,l=0,t=0,r=0,b=0):DATA2| self.SetRect(l,t,r,b)DATA$2 def SetRect(self,l=0,t=0,r=0,b=0):DATA3  self.L = lDATA3L self.T = tDATA3 self.R = rDATA3 self.B = bDATA4  def SetNullRect(self):DATA4L self.L = 0DATA4 self.T = 0DATA4 self.R = 0DATA5  self.B = 0DATA5L def Width(self):DATA5 return abs(self.R-self.L)DATA5 def Height(self):DATA6 return abs(self.T-self.B)DATA6l def Center(self):DATA`6 return self.L+int((float(self.Width())/2.0)+0.5),self.B+int((float(self.Height())/2.0)+0.5)DATA7< def PtInRect(self,x,y):DATAH7 if (x>=self.L and x<=self.R and y>=self.B and y<=self.T): return 1DATA7 else: return 0DATA8< def OffsetRect(self,x,y):DATA8 self.L += xDATA8 self.T += yDATA9  self.R += xDATA9L self.B += yDATAD9# --------------------------------------------------------------DATA9# DATA:,# Class CGHandleDATA:l# DATA@:# -------------------------------------------------------------DATA; class CGHandle:DATA;L "Graphic Handle class"DATA ; rc = NoneDATA; id = 0DATA; intensity = 0DATA<< maxcolors = 32DATA0<| def __init__(self,i=0,id=0,l=0,t=0,r=0,b=0):DATA< self.rc = CRect(l,t,r,b)DATA=, self.id = idDATA=l self.intensity = iDATA= def SetID(self,id):DATA= self.id = idDATA>, def MoveTo(self,x,y):DATA>l ctr = self.rc.Center()DATA> dx = x - ctr[0]DATA> dy = y - ctr[1]DATA?< self.rc.OffsetRect(dx,dy)DATA? del dx,dy,ctrDATA? def SetIntensity(self,i):DATA@ self.intensity = iDATA@\ def Draw(self):DATA@ glColor3f(1.0,0.0,0.0)DATA@ glBegin(GL_TRIANGLES)DATA(A, glVertex2d(self.rc.L,self.rc.B+15)DATA(A| glVertex2d(self.rc.R,self.rc.B+15)DATA0A glVertex2d(self.rc.Center()[0],self.rc.T+5)DATA B, glEnd()DATABl glColor3f(0.0,0.0,0.0)DATA(B glRasterPos2d(self.rc.L,self.rc.B+5)DATAC  Text(str(self.id))DATACL def HitTest(self,x,y):DATA C return self.rc.PtInRect(x,y)DATACDATADD # --------------------------------------------------------------DATAD|# DATAD# Class CVScrollListDATAD# DATA@E# -------------------------------------------------------------DATAEclass CVScrollLst:DATA E "Vertical Scroll List class"DATA<F def __init__(self,l=0,b=0,w=0,h=0,clr = [0.0,0.0,1.0]):DATAF self.selidx = -1DATAF self.topline = 0DATAG  self.datalst = []DATA(GL self.color = [clr[0],clr[1],clr[2]]DATA$G self.wndrc = CRect(l,b+h,l+w,b)DATAG self.fmouse = 0DATAH, def SetPos(self,l,b,w,h):DATA$H| self.wndrc.SetRect(l,b+h,l+w,b)DATAH def ClearLst(self):DATAI  del self.datalstDATAIL self.datalst = []DATA I def AddItem(self,s,tag=""):DATA I self.datalst.append([s,tag])DATAJ, def DelItem(self,idx):DATAJl del self.datalst[idx]DATA(J if self.selidx==idx: self.selidx=-1DATAJ def Sort(self):DATAK< self.datalst.sort()DATAK| def GetSelected(self):DATA8K if (self.selidx>-1): return self.datalst[self.selidx]DATAL else: return NoneDATAL\ def Draw(self):DATAL VPort = Buffer(GL_INT,4)DATA$L glGetFloatv(GL_VIEWPORT,VPort)DATAXM< glPushAttrib(GL_LIGHTING_BIT|GL_ENABLE_BIT|GL_DEPTH_BUFFER_BIT|GL_COLOR_BUFFER_BIT)DATAM glColor3f(0.75,0.75,0.75)DATA@N  glRectf(self.wndrc.L,self.wndrc.T,self.wndrc.R,self.wndrc.B)DATAN| glColor3f(0.0,0.0,0.0)DATAN glBegin(GL_LINE_LOOP)DATA(O  glVertex2d(self.wndrc.L,self.wndrc.T)DATA(O\ glVertex2d(self.wndrc.R,self.wndrc.T)DATA(O glVertex2d(self.wndrc.R,self.wndrc.B)DATA(O glVertex2d(self.wndrc.L,self.wndrc.B)DATA PL glEnd() DATAP glLineWidth(2.0)DATAP glColor3f(1.0,1.0,1.0)DATAQ glBegin(GL_LINE_STRIP)DATA,Ql glVertex2d(self.wndrc.L+2,self.wndrc.B+2)DATA,Q glVertex2d(self.wndrc.L+2,self.wndrc.T-2)DATA,R, glVertex2d(self.wndrc.R-2,self.wndrc.T-2)DATA R glEnd()DATAR glColor3f(0.45,0.45,0.45)DATAS glBegin(GL_LINE_STRIP)DATA,Sl glVertex2d(self.wndrc.L+2,self.wndrc.B+2)DATA,S glVertex2d(self.wndrc.R-2,self.wndrc.B+2)DATA,T, glVertex2d(self.wndrc.R-2,self.wndrc.T-2)DATA T glEnd()DATAT glColor3f(0.55,0.55,0.55)DATAHU glRectd(self.wndrc.L+5,self.wndrc.T-5,self.wndrc.R-27,self.wndrc.B+5)DATAU # Draw ItemsDATAU VPort = Buffer(GL_INT,4)DATA$V glGetFloatv(GL_VIEWPORT,VPort)DATAVl sz = len(self.datalst)DATA V max = self.wndrc.Height()/15DATA W  strmax = self.wndrc.Width()/8DATAW\ for i in range(max):DATA$W if self.selidx==i+self.topline:DATA<W glColor3f(self.color[0],self.color[1],self.color[2])DATA\X\ glRectf(self.wndrc.L+7,self.wndrc.T-5-(i*15),self.wndrc.R-30,self.wndrc.T-(i*15)-20)DATAX glColor3d(1,1,1)DATA Y, else:DATAYl glColor3d(0,0,0)DATA8Y glRasterPos2d(self.wndrc.L+7,self.wndrc.T-(i*15)-15)DATAZ  try:DATA,Z< msg = self.datalst[i+self.topline][0]DATA,Z if len(msg)>strmax: msg = msg[0:strmax]DATAZ Text(msg)DATA [< except:DATA [| passDATA[ #Draw HandleDATA[ if sz==0: sz=1DATA\< glColor3f(0.75,0.75,0.75)DATAL\ glRectf(self.wndrc.R-27,self.wndrc.T-5,self.wndrc.R-25,self.wndrc.B+5)DATA]  glColor3f(0.55,0.55,0.55)DATAH]\ glRectd(self.wndrc.R-25,self.wndrc.T-5,self.wndrc.R-5,self.wndrc.B+5)DATA] if sz=self.wndrc.R-27) and (dx<=self.wndrc.R-5) and (dy>=self.wndrc.B+5) and (dy<=self.wndrc.T-5):DATA@e< if (sz>max) and ((self.fmouse == 0) or (self.fmouse == 1)):DATAXe self.topline = int(float(self.wndrc.T-dy)/float(self.wndrc.Height())*float(sz))DATA4f, if self.topline>sz-max: self.topline = sz-maxDATAf self.fmouse = 1DATA8f elif (dy>=self.wndrc.B+5) and (dy<=self.wndrc.T-5):DATA0g, if (self.fmouse == 0) or (self.fmouse ==2):DATAPg nidx = int(float(self.wndrc.T-dy)/float(self.wndrc.Height()-8)*float(max))DATA$h  if nidx>max-1: nidx = max-1DATA$h\ self.selidx=self.topline+ nidxDATA h rtn=1DATAh self.fmouse = 2DATA,i, elif (buttons[0] == 0): # Left Button UpDATAi self.fmouse = 0DATA0i elif (buttons[1]==1): # Middle Button DownDATAj, passDATA,j\ elif (buttons[2]==1): # Right Button DownDATAj passDATA j Draw()DATAk, del ViewPortDATAklDATAk return rtnDATAk DATADl # --------------------------------------------------------------DATAl|# DATAl# Class CPickPaletteDATAl# DATA@m# -------------------------------------------------------------DATAmclass CPickPalette:DATAm "Pick Palette class"DATAn  wndrc = CRect()DATAnL clientrc = CRect()DATAn palrc = CRect()DATAn hndlst = []DATA o  curidx = 0DATAoL vs = 0DATAo| maxcolors = 0DATAo curHandle = NoneDATA o fmouse = 0DATA p< visible=1DATA,p| def __init__(self,l=0,t=0,w=0,h=0,m=32):DATAp self.SetPos(l,t,w,h)DATAq self.maxcolors = mDATAq\ self.fmouse = 0DATAq def SetPos(self,l,t,w,h):DATAq px = l - self.wndrc.LDATAr, py = t - self.wndrc.TDATA$rl self.wndrc.SetRect(l,t,l+w,t-h)DATAHr self.clientrc.SetRect(5,5,self.wndrc.Width()-5,self.wndrc.Height()-5)DATA0s, self.vs = float(self.clientrc.Height())/3.0 DATAds self.palrc.SetRect(self.wndrc.L+5,self.wndrc.T-5-self.vs,self.wndrc.R-5,self.wndrc.B+5+self.vs)DATAt for hnd in self.hndlst:DATAtl hnd.rc.OffsetRect(px,py)DATA t del px,pyDATAt def SetMaxColors(self,m):DATAuL self.mascolors = mDATAu def Draw(self):DATA u if self.visible == 0: returnDATAv glColor3f(0.75,0.75,0.75)DATAvl glBegin(GL_QUADS)DATA(v glVertex2d(self.wndrc.L,self.wndrc.T)DATA(v glVertex2d(self.wndrc.R,self.wndrc.T)DATA(wL glVertex2d(self.wndrc.R,self.wndrc.B)DATA(w glVertex2d(self.wndrc.L,self.wndrc.B)DATA w glEnd()DATAx, glColor3f(0.0,0.0,0.0)DATAx| glBegin(GL_LINE_LOOP)DATA(x glVertex2d(self.wndrc.L,self.wndrc.T)DATA(y  glVertex2d(self.wndrc.R,self.wndrc.T)DATA(y\ glVertex2d(self.wndrc.R,self.wndrc.B)DATA(y glVertex2d(self.wndrc.L,self.wndrc.B)DATA y glEnd() DATAz< glLineWidth(2.0)DATAz| glColor3f(1.0,1.0,1.0)DATAz glBegin(GL_LINE_STRIP)DATA,{ glVertex2d(self.wndrc.L+2,self.wndrc.B+2)DATA,{| glVertex2d(self.wndrc.L+2,self.wndrc.T-2)DATA,{ glVertex2d(self.wndrc.R-2,self.wndrc.T-2)DATA |< glEnd()DATA|| glColor3f(0.45,0.45,0.45)DATA| glBegin(GL_LINE_STRIP)DATA,} glVertex2d(self.wndrc.L+2,self.wndrc.B+2)DATA,}| glVertex2d(self.wndrc.R-2,self.wndrc.B+2)DATA,} glVertex2d(self.wndrc.R-2,self.wndrc.T-2)DATA ~< glEnd()DATA~| glLineWidth(1.0)DATA~ glBegin(GL_LINES)DATA(~ for i in range(self.clientrc.R-5):DATA,L c = float(i)/float(self.clientrc.R-5)DATA glColor3f(c,c,c)DATA8 glVertex2d(self.wndrc.L+5+i,self.wndrc.B+5+self.vs)DATA8̀L glVertex2d(self.wndrc.L+5+i,self.wndrc.T-5-self.vs)DATA ̀ glEnd()DATÀ sz = len(self.hndlst)DATÁ, if (sz>0):DATA ́l c = (self.clientrc.R-5)/szDATA ́ i = 0 DATÁ for hnd in self.hndlst:DATÂL hnd.Draw()DATA<̂ glColor3f(hnd.intensity,hnd.intensity,hnd.intensity)DAT glBegin(GL_QUADS)DATA4̃< glVertex2d(self.wndrc.L+5+(i*c),self.wndrc.T-5)DATA8̃ glVertex2d(self.wndrc.L+5+(i*c)+c,self.wndrc.T-5)DATA@̃ glVertex2d(self.wndrc.L+5+(i*c)+c,self.wndrc.T-6-self.vs)DATA<̄l glVertex2d(self.wndrc.L+5+(i*c),self.wndrc.T-6-self.vs)DATA ̄ glEnd()DATA ̅ i+=1DATA̅\ del i,c,sz DATA̅ DATA̅ def HitTest(self,x,y):DATA$̆  return self.wndrc.PtInRect(x,y)DATĂ\DATA ̆ def PaletteHitTest(self,x,y):DATA@̆ """ Return None if HitTest over the palette of colors failDATA<̇L or the created Handle where the user clicks the mouse."""DATA$̇ if (self.palrc.PtInRect(x,y)):DATA$̈  if self.curidxhnd.id: h.id-=1DATA̖ del self.hndlst[i]DATA̖\ self.curidx-=1 DATA̖DATA ̖ def HndLstHitTest(self,x,y):DATA̗ for hnd in self.hndlst:DATA,̗l if (hnd.rc.PtInRect(x,y)): return hndDATA̗ return NoneDATA̘ DATA̘< def ResetContent(self):DATA̘ for hnd in self.hndlst:DATA ̘ c = hndDATA̙ hnd = NoneDATA ̙\ del cDATA̙ self.hndlst = []DATA̙ self.curidx = 0DATA̚DATA̚L def GetNumColors(self):DATA̚ return len(self.hndlst)DATA̚ DATA̛ def Visible(self,val=1):DATA̛l self.visible = valDATA̛ DATA(̛ def OnMouseMove(self,dx,dy,buttons):DATA0̜, """ Mouse Move Rutine for this control."""DATA$̜ if self.visible == 0: return 0 DATA ̜ rtn = 0DATA$̝ if self.HitTest(dx,dy)==0: returnDATA ̝l ViewPort = Buffer(GL_FLOAT,4)DATA$̝ glGetFloatv(GL_VIEWPORT,ViewPort)DATA̞ DATA(̞< if (buttons[0]): # Left Button DownDATA̞ self.fmouse = 1DATA̞ if self.curHandle!=None:DATA̟ #Move handleDATA,̟\ if (self.HandlerAreaHitTest(dx,dy)):DATA$̟ self.curHandle.MoveTo(dx,dy)DATA ̠  else:DATA̠L # Create a new handleDATA(̠ hnd = self.PaletteHitTest(dx,dy)DATA̠ if (hnd != None): DATAL̡, w = CGHandle(hnd.intensity,hnd.id,hnd.rc.L,hnd.rc.T,hnd.rc.R,hnd.rc.B)DATA̡ self.AddHandle(w)DATA̡ del w,hndDATA ̢, else:DATA̢l # Select handleDATA0̢ self.curHandle=self.HndLstHitTest(dx,dy)DATAḌ  elif (buttons[0] == 0) and (self.fmouse ==1): # Left Button UpDATẠ| if self.curHandle!=None:DATA ̣ i = self.GetIntensityAt(dx)DATA<̤ self.curHandle.SetIntensity(self.GetIntensityAt(dx))DATA̤ self.curHandle = NoneDATA ̤ rtn = 1DATḀ self.fmouse = 0DATA0̥\ elif (buttons[1]==1): # Middle Button DownDATḀ passDATA,̥ elif (buttons[2]==1): # Right Button DownDATA̦L # Select handleDATA,̦ self.curHandle=self.HndLstHitTest(dx,dy)DATA(̦ if self.curHandle: self.fmouse = 2DATA̧< DATA,̧l elif (buttons[2]==0): #Right Button UpDATA4̧ if self.curHandle!=None and (self.fmouse == 2):DATA8̨, if Blender.Draw.PupMenu("Delete?%t|Yes%x1|No%x0"):DATĄ #Delete handleDATA(̨ self.RemoveHandle(self.curHandle)DATA̩ self.curHandle=NoneDATA̩l self.fmouse = 0DATA ̩ Draw()DATA̩ del ViewPortDATA̪,DATA̪\ return rtnDATA̪DATAD̪# ---------------------------------------------------------------DATA̫<#DATA̫l# Event DefinitionsDATA̫#DATAD̫# --------------------------------------------------------------- DATA̬LEVENT_NONE = 0DATA̬EVENT_WIDTH = 1DATA̬EVENT_HEIGHT = 2DATA̭ EVENT_ASPX = 3DATA̭LEVENT_ASPY = 4DATA̭EVENT_CHANGE_MASK = 5DATA̭EVENT_LINE_W = 6DATA̮ EVENT_SIL_W = 7DATA̮LEVENT_LINES = 8 DATA̮EVENT_RENDER_TYPE = 9DATA̮EVENT_PIXELATE=10DATA̯ EVENT_LEVEL=11DATA̯LEVENT_SILHOUETTE = 12DATA̯EVENT_COLOR = 13DATA̯EVENT_STARTFRAME = 14DATA̰ EVENT_ENDFRAME = 15DATA̰LEVENT_STEPFRAME = 16DATA̰EVENT_E0 = 17DATA̰EVENT_E1 = 18DATA̱ EVENT_E2 = 19DATA̱LEVENT_E3 = 20DATA̱EVENT_CREATE_SWF = 21DATA̱EVENT_CREATE_BMP = 22 DATA̲ EVENT_FILENAME =23DATA̲LEVENT_MASK = 24DATA̲EVENT_REFRESH=25DATA̲EVENT_QUIT= 26DATA̳ EVENT_LOOP=27DATA̳LEVENT_QLTY=28DATA̳EVENT_FPS=29DATA̳EVENT_PREVIEW=30DATA̴ EVENT_CREATE_TIF=31DATA̴LEVENT_MENU_RENDER=32DATA̴EVENT_MENU_EXPORT=33DATA̴EVENT_MENU_SEQUENCE=34DATA̵ EVENT_ADD_ITEM = 35DATA̵LEVENT_DEL_ITEM = 36DATA̵EVENT_REMOVE_ALL = 37DATA̵EVENT_ADD_ALL = 38DATA̶ EVENT_GET_FILE = 39DATA̶LEVENT_PATHNAME = 40DATA̶EVENT_SEQUENCE_SWF = 41DATA̶EVENT_BROWSE = 42DATA̷ EVENT_SEQ_FLAG = 43DATA̷LEVENT_NUM_SEQ_F = 44DATA̷EVENT_PARAMS = 45DATA̷EVENT_RESETFRAMES = 46DATA̸ EVENT_VEC_PREVIEW = 47DATA̸LEVENT_VEC_TYPE = 48DATA̸EVENT_TOLERANCE = 49DATA̸EVENT_SHADOW = 50DATA̹ EVENT_LAMP_SHADOW = 52DATA̹LDATA@̹|# -------------------------------------------------------------DATA̹#DATA ̺# ConstantsDATA̺\#DATA@̺# -------------------------------------------------------------DATA̺SMALL = 0.000001DATA̻<DATA@̻l# -------------------------------------------------------------DATA̻#DATA̼ # Common functionsDATA̼L#DATA@̼|# -------------------------------------------------------------DATA̼def sgn(n): DATA̽, if (n>=0): return 1DATA̽l else: return -1DATA̽def sgn0(n):DATA̽ if (n>SMALL): return 1DATA̾, elif (n=0: ax = D[0]DATA else: ax = -D[0]DATA\ if D[1]>=0: ay = D[1]DATAߜ else: ay = -D[1]DATA if D[2]>=0: az = D[2]DATA else: az = -D[2]DATA(\ if (ax+ay+az) < SMALL: return NoneDATA  maxc = 0DATA if (ax>ay):DATA, if (ax>az): maxc =1DATAl else: maxc = 3DATA else:DATA if (ay>az): maxc =2DATA else: maxc = 3DATA,\ #Zero max coordinate and solve other twoDATA4 d1 = -1 * DotVecs(self.vn,Vector(self.pts[1]))DATA0 d2 = -1 * DotVecs(pl.vn,Vector(pl.pts[1]))DATA| x = 0DATA y = 0DATA z = 0DATA(  if maxc == 1: # intersect with x=0DATA,\ y = (d2*self.vn[2] - d1*pl.vn[2]) / D[0]DATA, z = (d1*pl.vn[1] - d2*self.vn[1]) / D[0]DATA( elif maxc == 2: # intersect with y=0DATA,l x = (d1*pl.vn[2] - d2*self.vn[2]) / D[1]DATA, z = (d2*self.vn[0] - d1*pl.vn[0]) / D[1]DATA , else: #intersect with z=0DATA,| x = (d2*self.vn[1] - d1*pl.vn[1]) / D[2]DATA, y = (d1*pl.vn[0] - d2*self.vn[0]) / D[2]DATA< D.normalize()DATA$| return [[x,y,z],[D.x,D.y,D.z]] DATADATA$ def over_under_face(self,ptslst):DATA(L u = map(sgn0,map(self.solve,ptslst))DATA count=[0,0,0] #-1,0,1 DATA for item in u:DATA , if (item==-1): count[0]+=1DATA | elif (item==0): count[1]+=1DATA else: count[2]+=1DATA  sz = len(ptslst)DATA<L if count[0]>0 and count[2]==0: return -1 # poly at backDATA@ elif count[2]>0 and count[0]== 0: return 1 # poly at frontDATA0, elif count[1] == sz: return 0 # poly on planeDATA else: return 2DATADATA, def intersect_face(self,ptslst,bsplit=1):DATA4\ """Test if the face is intersecting this plane.DATA@ Parameter: Polygon face [[x0,y0,z0],[x1,y1,z1],...[xn,yn,zn]]DATA,DATA\ Return values:DATAD None - If face is on one side of the plane (Not intersection)DATAT  [[face]] - List containing one face (original given face) when the plane andDATAD the face are coplanar (face and plane are the same plane)DATAT [[face],[face]] - List of two faces (original face splitted) one for the face DATAD| infront of the plane and other for the face behind the plane.DATA """DATA( ans = self.over_under_face(ptslst)DATALl if (ans==-1 or ans == 1): return None #Face is on one side of the planeDATA8 elif (ans == 0): return [ptslst] #Coplanar trianglesDATAL else: # SplitDATA #No split if flag offDATA$ if bsplit==0: return [ptslst]DATA<, # Double check the intersection of faces not only planesDATA, #npl = _Plane().set_from_face(ptslst)DATA, #ans2 = npl.over_under_face(self.pts)DATA,\ #if ans2==-1 or ans2 == 1: return NoneDATA DATA  #Split DATA , dv1 = map(self.solve,ptslst)DATA| s1 = map(sgn0,dv1)DATA  f1 = []DATA  f2 = []DATA< sz = len(s1)DATA| for idx in range(sz):DATA i = idx + 1DATA  if i>=sz: i = 0DATA,L if (s1[idx]>0): f1.append(ptslst[idx])DATA0 elif (s1[idx]<0): f2.append(ptslst[idx])DATA   else: DATAL f1.append(ptslst[idx])DATA f2.append(ptslst[idx])DATA  if s1[i]!=0 and s1[idx]!=0:DATA< if (s1[i]!=s1[idx]):DATA8 k = self.intersect_line([ptslst[idx],ptslst[i]])DATA f1.append(k[0])DATA, f2.append(k[0])DATAl return [f1,f2]DATADATA#p = _Plane()DATA4#p = p. set_from_face([[0,0,0],[1,0,0],[1,1,0]])DATA,|#f = [[1,1,1],[3,1,1],[2,1,-1],[3,1,-1]]DATA#print p.intersect_face(f)DATA,DATA\DATAD# --------------------------------------------------------------DATA# DATA,# Class _FrustumDATAl# DATA@# -------------------------------------------------------------DATA class _Frustum:DATAL "Frustum class"DATA  val = []DATA def calculate(self,m,p):DATA$ "Calculate frustum bouding box."DATA l c = p * mDATA  q = c[3]DATA self.val[0].set(q+c[0])DATA< # self.val[0].normalize()DATA self.val[1].set(q-c[1])DATA # self.val[1].normalize()DATA, self.val[2].set(q-c[0])DATA | # self.val[2].normalize() DATA self.val[3].set(q+c[1])DATA # self.val[3].normalize()DATAl self.val[4].set(q-c[2])DATA # self.val[4].normalize()DATA  self.val[5].set(q+c[2])DATA\ # self.val[5].normalize()DATA  def __init__(self,model,proj):DATA$ "Frustum is a vector of planes." DATAL pl = _Plane() # LeftDATA pt = _Plane() # TopDATA pr = _Plane() # RightDATA  pb = _Plane() # BottomDATA\ pk = _Plane() # bacKDATA pf = _Plane() # ForwardDATA$ self.val = [pl,pt,pr,pb,pk,pf]DATA < self.calculate(model,proj)DATA def pt_inside(self,pt):DATA8 """Check if a point [x,y,z] is inside the frustum.DATA < (1 = inside, 0 = outside)"""DATA for pl in self.val:DATA$ if (pl.solve(pt)<0): return 0DATA  return 1DATA$\ def sphere_inside(self,center,r):DATA8 """Check if a sphere with the center point at [x,y,z]DATA8  and with a radius r, is inside the frustum. Return 1DATA l if is inside, 0 if not."""DATA for pl in self.val:DATA( if (pl.solve(center)<=-r): return 0DATA  L return 1DATA,  def partial_sphere_inside(self,center,r):DATA8  """Check if a sphere with the center point at [x,y,z]DATA8 L and with a radius r, is partial inside the frustum. DATA   Return: 0 - Totally outsideDATA  1 - Partially insideDATA L 2 - Totally inside"""DATA  p = 0DATA  for pl in self.val:DATA  d = pl.solve(center)DATA L if (d<=-r): return 0DATA  elif (d>r): p = p + 1DATA  if (p == 6): return 2DATA   return 1DATA \ def box_inside(self,box):DATA8  """Check if a box is inside the frustum (qFrustum).DATA<  First check if the center of the box is infront of allDATA@| the planes, if true then return 1, if not check every cornerDATA@ to find at least one that is infront of the frustum planes,DATA4\ if such case occurs then return 1 else 0."""DATA0 if (self.pt_inside(box.center)==1): return 1DATA else:DATAL for pl in self.val:DATA found = 0DATA for pt in box.val:DATA  if (pl.solve(pt)>0):DATA\ found = 1DATA  breakDATA  if (found == 0): return 0DATA , return 1DATA$l def partial_box_inside(self,box):DATA@ """Check if a box is partial inside the frustum (qFrustum).DATA , Return: 0 - Totally outsideDATA| 1 - Partially insideDATA 2 - Totally inside"""DATA for pt in box:DATA\ found = 0DATA for pl in self.val:DATA$ if (pl.solve(pt))>0: found+=1DATA, if found>=3: return 1DATA | return 0DATA( def partial_face_inside(self,face):DATA4  """Check if a face is partial inside the frustum.DATA l Return: 0 - Totally outsideDATA 1 - Partially insideDATA  2 - Totally inside"""DATA \ p = 0 DATA sz = len(face)DATA for pl in self.val:DATA found = 0DATA\ for pt in face:DATA, if (pl.solve(pt)>=0): found = found + 1DATA if (found==0): return 0DATA L if (found == sz): p = p + 1DATA if (p == 6): return 2DATA  return 1DATADATADL# ---------------------------------------------------------------DATA # Function : MatrixToBufferDATA  # Inputs :DATAL# OutPuts :DATA# Description :DATAD# --------------------------------------------------------------- DATA<def MatrixToBuffer(m):DATA@| return Buffer(GL_FLOAT,16,[m[0][0],m[0][1],m[0][2],m[0][3],DATA, m[1][0],m[1][1],m[1][2],m[1][3],DATA,L m[2][0],m[2][1],m[2][2],m[2][3],DATA, m[3][0],m[3][1],m[3][2],m[3][3]])DATA DATAD<# ---------------------------------------------------------------DATA# Function : PerspectiveDATA # Inputs :DATA<# OutPuts :DATA|# Description :DATAD# --------------------------------------------------------------- DATA, ,def Perspective(fovy, aspect, near,far):DATA(  top = near * tan(fovy * pi / 360.0)DATA  bottom = -topDATA! left = bottom*aspectDATA!\ right= top*aspectDATA$! x = (2.0 * near) / (right-left)DATA$! y = (2.0 * near) / (top-bottom)DATA$"< a = (right+left) / (right-left)DATA$" b = (top+bottom) / (top - bottom)DATA$" c = - ((far+near) / (far-near))DATA$#, d = - ((2*far*near)/(far-near))DATAP#| return Matrix([x,0.0,a,0.0],[0.0,y,b,0.0],[0.0,0.0,c,d],[0.0,0.0,-1.0,0.0])DATA# DATAD$,# ---------------------------------------------------------------DATA $# Function : IntersectLinesDATA $# Inputs :DATA%,# OutPuts :DATA%l# Description :DATAD%# --------------------------------------------------------------- DATA$&def IntersectLines(l1,l2,flag = 0):DATA&l d = float(l1[2]-l1[0])DATA$& if d!=0: m1 = float(l1[3]-l1[1])/dDATA& else: m1 = 10000000000.0DATA'L d = float(l2[2]-l2[0])DATA$' if d!=0: m2 = float(l2[3]-l2[1])/dDATA' else: m2 = 10000000000.0DATA(, #compute ConstantsDATA0(l a1 = m1;b1 = -1.0;c1 = float(l1[1]-m1*l1[0])DATA0( a2 = m2;b2 = -1.0;c2 = float(l2[1]-m2*l2[0])DATA), if m1 == m2:DATAT)l if abs(a1*l2[0] + b1*l2[1] + c1) < SMALL: return [(l1[0],l1[1]),(l1[2],l1[3])]DATA) else:DATA* #Inverse determinantDATA$*\ invdet = 1/((a1*b2) - (a2*b1))DATA* #Kramer's RuleDATAT* pt = (int((((b1*c2)-(b2*c1))*invdet)+0.5),int((((a2*c1)-(a1*c2))*invdet)+0.5))DATA+l if flag: return [pt]DATA+ j=0;k=2;i=1;l=3DATA+ if l1[0]>l1[2]:DATA ,, j = 2DATA ,l k = 0DATA, if l1[1]>l1[3]:DATA , i = 3DATA -, l = 1DATAH-l if (pt[0]>=l1[j] and pt[0]<=l1[k] and pt[1]>=l1[i] and pt[1]<=l1[l]):DATA- return [pt] DATA. return NoneDATA.\DATAD.# ---------------------------------------------------------------DATA.# Function : InsideEdgeDATA /L# Inputs :DATA/# OutPuts :DATA/# Description :DATAD0 # --------------------------------------------------------------- DATA0|def InsideEdge(pt,e):DATAH0 if ((e[2]-e[0])*(pt[1]-e[1])) < ((pt[0]-e[0])*(e[3]-e[1])): return 1DATA 1, return -1DATA1lDATAD1# ---------------------------------------------------------------DATA2 # Function : EdgeClipDATA 2L# Inputs :DATA2# OutPuts :DATA2# Description :DATAD3 # --------------------------------------------------------------- DATA3|def EdgeClip(inlist,edge):DATA3 outlst = []DATA4  sz = len(inlist)DATA4L s = inlist[sz-1]DATA4 for p in inlist:DATA4 if InsideEdge(p,edge)>0:DATA5 if InsideEdge(s,edge)<0:DATA45l i = IntersectLines([s[0],s[1],p[0],p[1]],edge)DATA85 if i!=None: outlst.append((i[0][0],i[0][1],s[2]))DATA6, outlst.append(p)DATA6l else:DATA6 if InsideEdge(s,edge)>0:DATA46 i = IntersectLines([s[0],s[1],p[0],p[1]],edge)DATA87L if i!=None: outlst.append((i[0][0],i[0][1],p[2])) DATA7 s = pDATA7 return outlstDATA8DATAD8L# ---------------------------------------------------------------DATA8# Function :PolyClipDATA 8# Inputs :DATA9<# OutPuts :DATA9|# Description :DATAD9# --------------------------------------------------------------- DATA:,def PolyClip(vertexlst):DATA:| global gW,gHDATAT: ClipRgnEdges = [[0,0,0,gH.val],[0,gH.val,gW.val,gH.val],[gW.val,gH.val,gW.val,0],DATA;< [gW.val,0,0,0]]DATA;| inlist = vertexlstDATA; for edge in ClipRgnEdges:DATA,<  if inlist==None or inlist == []: breakDATA$,# OutPuts :DATA>l# Description :DATAD># --------------------------------------------------------------- DATA(?def RenderWireFrame(tofile,w,h,ax,ay):DATA(?l global gLineWidth,gbSilhouette,gGenColDATA0? global gMsg,gCurrentFrame,gRendering,buffImageDATA@DATA@L gRendering = 1DATA@ DATA @ mW = w/2DATA @ mH = h/2DATAA< DATAAl # Set Current FrameDATA(A Blender.Set('curframe',gCurrentFrame)DATAA Blender.Window.RedrawAll()DATABL # Get SceneDATA$B sc = Blender.Scene.getCurrent()DATAB obList = sc.getChildren()DATAC,DATA C\ if tofile:DATAC sh = bShape()DATAC sh.Reset()DATAD movie = []DATAD\ placelist = []DATA D gMsg = "Rendering Wireframe"DATAD oldclr = [-1,-1,-1]DATAE, bChgColor = 0DATAEl else:DATA E glClearColor(0.0,0.0,0.3,1.0)DATA8E glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)DATA,FL glPolygonMode(GL_FRONT_AND_BACK,GL_FILL)DATAF #Draw BackgroundDATA8F glColor3f(gGenCol[3][0],gGenCol[3][1],gGenCol[3][2])DATAGL glBegin(GL_POLYGON)DATAG glVertex2d(9,10)DATAG glVertex2d(w+10,10)DATAH  glVertex2d(w+10,h+10)DATAHL glVertex2d(9,h+10)DATA H glEnd()DATA,H glPolygonMode(GL_FRONT_AND_BACK,GL_LINE)DATAI,DATAI\ # Get Visible LayersDATA(I layerslst = Blender.Window.ViewLayer()DATAI layerslst.reverse()DATAJ, LayerMask = 0DATA0Jl for l in layerslst: LayerMask += (2**(l-1))DATAJ del layerslstDATA8K  # Calculate Perspective Matrix from the current cameraDATA$Kl obCamera = sc.getCurrentCamera()DATAK del scDATA$K cam = obCamera.getInverseMatrix()DATAL< cam.transpose() DATAL|DATAL # Changing the view modeDATAL cmra = obCamera.getData()DATA0ML fovy = (2.0*atan2(34.5/2.0,cmra.lens))*180/piDATAPM m2 = Perspective(fovy,float(w*ax)/float(h*ay),cmra.clipStart, cmra.clipEnd) DATAN, del fovy,cmraDATANl DATAN #Create Frustum DATAN frustum = _Frustum(cam,m2)DATAO, m1 = Matrix()DATAOl mP = Matrix()DATA O numobj = 0DATAO for obMesh in obList:DATAHP, if (type(obMesh.data)==NMeshType) and ((obMesh.Layer & LayerMask)>0):DATA<P mhActual = NMesh.GetRawFromObject(obMesh.name) #GetRawDATA4Q  #Obtain the colors of the objects in this frameDATAQl colors = []DATA$Q if len(mhActual.materials)>0:DATA(Q for colsmat in mhActual.materials:DATADRL colors.append([colsmat.R,colsmat.G,colsmat.B,colsmat.alpha])DATA(R else: colors = [[0.7,0.7,0.7,1.0]]DATA S  m1 = obMesh.matrixWorld #matDATAS\ m1.transpose()DATAS mP = cam * m1DATAS mP = m2 * mPDATATDATATL b = obMesh.getBoundBox()DATA T bb=[]DATAT for nb in b:DATA<U nb1 = MatMultVec(m1,Vector([nb[0],nb[1],nb[2],1.0]))DATA(U bb.append([nb1[0],nb1[1],nb1[2]])DATA,U if (frustum.partial_box_inside(bb)>0):DATA V< # Obtain the list of facesDATA V for f in mhActual.faces:DATAV tf = []DATAW t2 = []DATAW\ for v in f.v:DATA4W #Transform the vertices to global coordinatesDATA@W p = MatMultVec(mP,Vector([v.co[0],v.co[1],v.co[2],1.0]))DATAXl tf.append(p)DATA@X p = MatMultVec(m1,Vector([v.co[0],v.co[1],v.co[2],1.0]))DATA$Y t2.append([p[0],p[1],p[2]])DATA,Yl if (frustum.partial_face_inside(t2)):DATAY if tofile:DATATZ  # ------------------------------------------------------------- SWF BeginDATAxZ clr = [int(colors[f.mat][0]*255),int(colors[f.mat][1]*255),int(colors[f.mat][2]*255),int(colors[f.mat][3]*255)]DATA[, bChgColor = 0DATA`[l if (oldclr[0]!=clr[0] or oldclr[1]!=clr[1] or oldclr[2]!=clr[2] or oldclr[3]!=clr[3] ):DATAD[ _fsa = FILLSTYLEARRAY([FILLSTYLE(SOLID_FILL,[0,0,0,255])])DATAL\l _lsa = LINESTYLEARRAY([LINESTYLE(1,[clr[0],clr[1],clr[2],255])])DATA0\ oldclr = [clr[0],clr[1],clr[2],clr[3]]DATA]L bChgColor = 1DATAP] # ------------------------------------------------------------- SWF EndDATA ^  else:DATA$^L glLineWidth(gLineWidth.val)DATAH^ glColor3f(colors[f.mat][0],colors[f.mat][1],colors[f.mat][2]) DATA_  glBegin(GL_POLYGON)DATA_\DATA_ iu = [] DATA_ for p in tf:DATA`  # Create PointDATA`L if p[3]<=0:DATA` x = int(p[0]*mW)+mWDATA` y = int(p[1]*mH)+mHDATAa, else:DATA$al x = int((p[0]/p[3])*mW)+mWDATA$a y = int((p[1]/p[3])*mH)+mHDATAb  DATAb< iu.append([x,y,0])DATAb #clippingDATAb iu = PolyClip(iu)DATAcDATAcL if len(iu)>0:DATAc if not tofile:DATA4c for i in iu: glVertex2d(i[0]+10,i[1]+10)DATAd, glEnd()DATAdl else:DATATd # ------------------------------------------------------------- SWF BeginDATAe, if bChgColor==1:DATAhe| sh.SetStyleRecord(SH_MOVE+SH_LINESTYLE+SH_NEWSTYLES,iu[0][0],h-iu[0][1],0,0,1,1,1,_fsa,_lsa)DATA0f  else: sh.MoveTo(iu[0][0],h-iu[0][1])DATA$fl for k in range(len(iu)):DATAf i = k+1DATA f if i>=len(iu): i = 0DATA@gL sh.LineTo(iu[i][0]-iu[k][0],(h-iu[i][1])-(h-iu[k][1]))DATAPg # ------------------------------------------------------------- SWF EndDATAh< del iuDATA h| del tfDATA h numobj+=1DATAhDATAi, del LayerMaskDATAilDATA i if tofile:DATALi # ------------------------------------------------------------- SWF BeginDATAj\ sh.EndShape()DATAj movie = sh.GetShape()DATAj gPercentage = 0.0DATA k del shDATA k\ Draw()DATAk gRendering = 0DATAk return movieDATALl # ------------------------------------------------------------- SWF EndDATAl else:DATA,l glPolygonMode(GL_FRONT_AND_BACK,GL_FILL)DATAm, glLineWidth(1.0)DATA$ml buffImage = Buffer(GL_BYTE,w*h*3)DATAm # Viewpoint dataDATA m ViewData = Buffer(GL_INT,4)DATA(nL glGetIntegerv(GL_VIEWPORT,ViewData)DATAn glReadBuffer(GL_BACK)DATATn glReadPixels(ViewData[0]+10,ViewData[1]+11,w,h,GL_RGB,GL_UNSIGNED_BYTE,buffImage)DATAo\ gRendering = 0DATA o return 0DATAoDATADp # ---------------------------------------------------------------DATAp|# Function : DrawObjectsDATA p# Inputs :DATAq # OutPuts :DATAqL# Description :DATADq# --------------------------------------------------------------- DATAqdef DrawObjects(tofile):DATADrL global gRenderType, buffImage,shadowbuff,gEnableMask,gCurrentFrameDATA<r global gW,gH,gAspX,gAspY, gFX, gFXType,gLevel,gRenderingDATA4s, global gLineWidth,gbLines,gbSilhouette,gSilWidthDATA(s global gGenCol,gPalette,gDoubleSidedDATAs global gShadowDATAt DATAtL gRendering = 1DATAtDATAt # Set Current FrameDATA(t Blender.Set('curframe',gCurrentFrame)DATAuL Blender.Window.RedrawAll()DATAu #Get Current SceneDATA$u sc = Blender.Scene.getCurrent()DATAv, # Get Visible LayersDATA(vl layerslst = Blender.Window.ViewLayer()DATAv layerslst.reverse()DATAv LayerMask = 0DATA0w< for l in layerslst: LayerMask += (2**(l-1))DATAw del layerslstDATAw # Get Current cameraDATA$x obCamera = sc.getCurrentCamera()DATAxl cmra = obCamera.getData()DATAx obList = sc.getChildren()DATAy  del scDATAy<DATA8yl # Calculate Perspective Matrix from the current cameraDATA$y cam = obCamera.getInverseMatrix()DATAz cam.transpose() DATA4z\ fovy = (2.0*atan2(34.5/2.0,cmra.lens))*180.0/piDATAhz m3 = Perspective(fovy,float(gW.val*gAspX.val)/float(gH.val*gAspY.val),cmra.clipStart, cmra.clipEnd) DATA{L # Create FrustumDATA{ frustum = _Frustum(cam,m3)DATA{ LampLst = []DATA| #Get all lamps positionsDATA|l for obj in obList:DATA | if (obj.getType()=="Lamp"):DATA| lmp = obj.getData()DATA}< flags = lmp.getMode()DATA } shdw = 0DATA,} if flags & lmp.Modes['Shadows']: shdw=1DATA~, loc = obj.locDATAD~l LampLst.append([loc[0],loc[1],loc[2],shdw,lmp.getClipEnd()]) DATA~ del lmp,loc,shdw,flagsDATA, DATA(\ numcolors = 64/gPalette.GetNumColors()DATA$ m = 64 % gPalette.GetNumColors()DATA vMaskColors = []DATA ̀< for hnd in gPalette.hndlst:DATÀ r = [hnd.intensity]DATÀ r *= numcolors DATÁ  vMaskColors.extend(r)DATÁL del rDATA ́| if (m>0):DATÁ idx = len(vMaskColors)-1DATA ͂  r = [vMaskColors[idx-1]] * mDATA͂\ vMaskColors.extend(r)DATA ͂ del r,idxDATA ͂ del hndDATA̓DATAl̓L glPushAttrib(GL_LIGHTING_BIT|GL_ENABLE_BIT|GL_DEPTH_BUFFER_BIT|GL_COLOR_BUFFER_BIT|GL_STENCIL_BUFFER_BIT)DATA̓ glDisable(GL_SCISSOR_TEST)DATA ̈́< glClearColor(0.0,0.0,0.3,1.0)DATÄ́ glClearStencil(0)DATA4̈́ glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)DATAͅ, glEnable(GL_SCISSOR_TEST)DATAͅ|DATAͅDATAͅ if gEnableMask.val:DATA8͆ glColor3f(gGenCol[0][0],gGenCol[0][1],gGenCol[0][2])DATA͆| else:DATA͆ #Draw BackgroundDATA8͆ glColor3f(gGenCol[3][0],gGenCol[3][1],gGenCol[3][2])DATA$͇L gModelMatrix = Buffer(GL_FLOAT,16)DATA$͇ gProjMatrix = Buffer(GL_FLOAT,16)DATA0͇ glGetFloatv(GL_MODELVIEW_MATRIX,gModelMatrix)DATA0͈L glGetFloatv(GL_PROJECTION_MATRIX,gProjMatrix)DATA͈ glBegin(GL_POLYGON)DATA͈ glVertex2d(9,10)DATA͉, glVertex2d(gW.val+10,10)DATA$͉| glVertex2d(gW.val+10,gH.val+10)DATA͉ glVertex2d(9,gH.val+10)DATA ͊ glEnd()DATA͊\DATA ͊ Viewport = Buffer(GL_INT, 4)DATA(͊ glGetIntegerv(GL_VIEWPORT, Viewport)DATA<͋, glViewport(Viewport[0]+10, Viewport[1]+10, gW.val, gH.val)DATA͋DATA͋ glEnable(GL_DEPTH_TEST)DATA͌ glDisable(GL_LIGHTING)DATA͌\ glShadeModel(GL_FLAT)DATA͌ glDrawBuffer(GL_BACK)DATA͌DATA ͍  glMatrixMode(GL_PROJECTION)DATA͍\ glPushMatrix()DATA͍ glLoadIdentity()DATAh͍ m3 = Perspective(fovy,float(gW.val*gAspX.val)/float(gH.val*gAspY.val), cmra.clipStart, cmra.clipEnd) DATA͎l del cmra,fovyDATA͎DATA͎ m3.transpose()DATA͏ proj = MatrixToBuffer(m3)DATA͏l glMultMatrixf(proj)DATA4͏ cam = MatrixToBuffer(obCamera.getInverseMatrix())DATA͐  glMultMatrixf(cam)DATA͐LDATA͐| glMatrixMode(GL_MODELVIEW)DATA͐ glLoadIdentity()DATA͑ DATA$͑< glPolygonMode(GL_FRONT,GL_FILL)DATA͑ if (gRenderType.val>=2):DATA͑ glDisable(GL_TEXTURE_2D)DATA@͒, glTexParameteri(GL_TEXTURE_1D, GL_TEXTURE_WRAP_S, GL_REPEAT)DATA@͒ glTexParameteri(GL_TEXTURE_1D, GL_TEXTURE_WRAP_T, GL_REPEAT)DATAD͓  glTexParameteri(GL_TEXTURE_1D, GL_TEXTURE_MAG_FILTER, GL_NEAREST)DATAD͓| glTexParameteri(GL_TEXTURE_1D, GL_TEXTURE_MIN_FILTER, GL_NEAREST)DATA<͓ glTexEnvf(GL_TEXTURE_ENV,GL_TEXTURE_ENV_MODE, GL_DECAL)DATA͔\ DATA͔DATA͔ width = gW.valDATA͔ height = gH.valDATA͕< bsz = width*height*3DATA$͕| buffImage = Buffer(GL_BYTE,bsz)DATA$͕ buff2 = Buffer(GL_BYTE,bsz)DATA,͖ shadowbuff= Buffer(GL_BYTE,bsz,[255]*bsz)DATA ͖| del bszDATA(͖ gBmpTexture = Buffer(GL_BYTE,32*3)DATA͗ DATA͗< gTextBits=[0]*32DATA4͗| if (gRenderType.val>3) and (gRenderType.val<7):DATAP͗ gTextBits = [1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0]DATA͘\DATA͘ w3 = width * 3DATA͘ j3 = height*w3DATA͙  bj3 = j3-w3DATA͙LDATA͙| dictfilter={}DATA͙ dictfilter[(0,0,0)]=1DATA ͙ dictfilter[(255,255,255)]=1DATA8͚L # __________________________________________________DATA8͚ # Add Background, lines, silhouette, and mask colorsDATA8͛  # __________________________________________________DATA͛l for i in [0,1,2,3]:DATA ͛ ir = int(gGenCol[i][0]*255)DATA ͛ ig = int(gGenCol[1][1]*255)DATA ͜L ib = int(gGenCol[1][2]*255)DATA ͜ if (ir,ig,ib) in dictfilter:DATA͜ passDATA͝ else:DATA͝L dictfilter[(ir,ig,ib)]=1DATA͝ ObjLst = []DATA͝ shadowlines = []DATA͞ for obj in obList:DATAD͞\ if (type(obj.data)==NMeshType) and ((obj.Layer & LayerMask)>0):DATA͞ m1 = obj.matrixWorldDATA͟  m1.transpose()DATA8͟L # ------------------------------------------------DATA ͟ # Set Object Bounding BoxDATA8͟ # ------------------------------------------------DATA ͠\ Box = []DATA͠ b = obj.getBoundBox()DATA ͠ bb=[]DATA͡, for nb in b:DATA<͡l nb1 = MatMultVec(m1,Vector([nb[0],nb[1],nb[2],1.0]))DATA(͡ bb.append([nb1[0],nb1[1],nb1[2]])DATA͢, Box.extend(bb)DATA͢l DATA͢ m1.transpose()DATA͢ m2 = CopyMat(m1)DATAͣ m2.transpose()DATAͣ\ DATA,ͣ if (frustum.partial_box_inside(Box)>0) :DATA8ͣ # ------------------------------------------------DATAͤL # Set MeshDATA8ͤ # ------------------------------------------------DATA0ͤ Mesh = NMesh.GetRawFromObject(obj.name) DATAͥL glPushMatrix()DATA ͥ mat = MatrixToBuffer(m1)DATAͥ glMultMatrixf(mat)DATA$ͦ invmat = obj.getInverseMatrix()DATAͦl colors = []DATA4ͦ #Obtain the colors of the objects in this frameDATA ͧ  if len(Mesh.materials)>0:DATA$ͧ\ for colsmat in Mesh.materials:DATADͧ colors.append([colsmat.R,colsmat.G,colsmat.B,colsmat.alpha])DATA(ͨ else: colors = [[0.7,0.7,0.7,1.0]]DATAͨlDATA(ͨ #Change the colors of the textures DATAͨ textures = []DATAͩ, for clr in colors:DATAͩl tones = []DATAͩ for t in range(64):DATA,ͩ ir = int((clr[0]*vMaskColors[t])*255)DATA,ͪ\ ig = int((clr[1]*vMaskColors[t])*255)DATA,ͪ ib = int((clr[2]*vMaskColors[t])*255)DATA$ͫ if (ir,ig,ib) in dictfilter:DATA ͫl passDATA ͫ else:DATA ͫ dictfilter[(ir,ig,ib)]=1DATA8ͬ< tones.append(int((clr[0]*vMaskColors[t])*255))DATA8ͬ tones.append(int((clr[1]*vMaskColors[t])*255))DATA8ͬ tones.append(int((clr[2]*vMaskColors[t])*255))DATAͭ\ textures.append(tones)DATAͭ del tonesDATAͭ glLineWidth(1.0) DATAͮ, DATA8ͮ\ if gDoubleSided.val == 0: glEnable(GL_CULL_FACE)DATAͮ DATAͮ edgedic = {}DATAͯ, capnear =[]DATAͯl capfar = []DATAͯ DATAͯ for face in Mesh.faces:DATAͰ, n = face.noDATA(Ͱl n =Vector([n[0],n[1],n[2],1.0])DATA Ͱ n = MatMultVec(invmat,n)DATAͱ  n.normalize()DATAͱL DATAͱ| if gbSilhouette.val>0:DATA ͱ glEnable(GL_CULL_FACE)DATA$Ͳ glLineWidth(gSilWidth.val)DATA(Ͳl glPolygonMode(GL_BACK,GL_LINE)DATAͲ glCullFace(GL_FRONT)DATAͳ  glBegin(GL_POLYGON)DATA<ͳ\ glColor3f(gGenCol[2][0],gGenCol[2][1],gGenCol[2][2])DATAͳ for vertex in face.v:DATA4ʹ glVertex3f(vertex[0], vertex[1], vertex[2])DATAʹ| glEnd()DATAʹ glCullFace(GL_BACK)DATA͵  glLineWidth(1.0) DATA0͵\ glPolygonMode(GL_FRONT_AND_BACK,GL_FILL)DATA8͵ if gDoubleSided.val == 1: glDisable(GL_CULL_FACE)DATAͶ DATA(ͶL clr = colors[face.materialIndex]DATA8Ͷ if (gRenderType.val==2) or (gRenderType.val==3):DATADͶ texbuff = Buffer(GL_BYTE, 64*3,textures[face.materialIndex])DATA ͷl glDisable(GL_TEXTURE_1D)DATAXͷ glTexImage1D(GL_TEXTURE_1D, 0, GL_RGB, 64, 0, GL_RGB, GL_UNSIGNED_BYTE, texbuff)DATA ͸< glEnable(GL_TEXTURE_1D)DATA ͸ elif (gRenderType.val>3):DATAX͸ r1,g1,b1 = int(gGenCol[1][0]*255),int(gGenCol[1][1]*255),int(gGenCol[1][2]*255)DATAD͹\ r2,g2,b2 = int(clr[0]*255),int(clr[1]*255),int(clr[2]*255)DATA͹ j,i = 0,0DATA ͺ  for i in range(0,32*3,3):DATAͺ\ if gTextBits[j]: DATAͺ gBmpTexture[i]=r1DATAͺ gBmpTexture[i+1]=g1DATAͻL gBmpTexture[i+2]=b1DATAͻ else:DATAͻ gBmpTexture[i]=r2DATAͼ, gBmpTexture[i+1]=g2DATAͼ| gBmpTexture[i+2]=b2DATA ͼ j+=1DATA ͽ  del i,j,r1,g1,b1,r2,b2,g2DATAͽ\ params=[]DATALͽ if (gRenderType.val==4): params=Buffer(GL_FLOAT,4,[1.0,0.0,0.0,0.0])DATAP; elif (gRenderType.val==5): params=Buffer(GL_FLOAT,4,[0.0,1.0,0.0,0.0])DATAP; elif (gRenderType.val==6): params=Buffer(GL_FLOAT,4,[0.0,0.0,1.0,0.0])DATA Ϳ glDisable(GL_TEXTURE_1D)DATA\Ϳl glTexImage1D(GL_TEXTURE_1D, 0, GL_RGB, 32, 0, GL_RGB, GL_UNSIGNED_BYTE, gBmpTexture)DATA Ϳ glEnable(GL_TEXTURE_1D)DATA<L glTexGeni(GL_S,GL_TEXTURE_GEN_MODE,GL_OBJECT_LINEAR)DATA0 glTexGenfv(GL_S,GL_OBJECT_PLANE,params)DATA8 glTexGeni(GL_T,GL_TEXTURE_GEN_MODE,GL_EYE_LINEAR)DATA,| glTexGenfv(GL_T,GL_EYE_PLANE,params)DATA$ glEnable(GL_TEXTURE_GEN_S)DATA, DATA\ del paramsDATA œ else:DATA( glColor3f(clr[0],clr[1],clr[2])DATA(, glPolygonMode(GL_FRONT,GL_FILL)DATA| DATAì p1 = face.v[0]DATA` vCamera = Vector([obCamera.loc[0]-p1[0],obCamera.loc[1]-p1[1],obCamera.loc[2]-p1[2],1.0])DATA| vCamera.normalize()DATA DATA@ #Create the Shadow Volume for the lamps that cast shadowsDATA0l if (len(LampLst)>0) and (gShadow.val>0):DATA DATA numlamp=0DATA< for lamp in LampLst:DATADƌ if lamp[3]==0: continue #Skip lamps that don't cast shadowsDATA0 infinity=lamp[4] #Lamp's Clip EndDATA\ numlamp+=1DATAǜ p2 = face.v[0]DATA< p2 = MatMultVec(m2,Vector([p2[0],p2[1],p2[2],1.0]))DATALL vLight = Vector([lamp[0]-p2[0],lamp[1]-p2[1],lamp[2]-p2[2],1.0])DATA vLight.normalize()DATA( if (DotVecs(vLight,n)>-0.001):DATAl _cn=[] # Near CapDATAɼ _cf=[] # Far CapDATA(  for iv in range(len(face.v)):DATA\ pt2 = face.v[iv]DATADʬ vtx2 = MatMultVec(m2,Vector([pt2[0],pt2[1],pt2[2],1.0]))DATA$ # Find silhuette shadowDATA$l v1 = face.v[iv-1].indexDATA ˼ v2 = face.v[iv].indexDATAH  if (numlamp,v1,v2) in edgedic: edgedic[(numlamp,v1,v2)]=NoneDATAH| elif (numlamp,v2,v1) in edgedic: edgedic[(numlamp,v2,v1)]=NoneDATA else:DATA , pt1 = face.v[iv-1]DATA| pt2 = face.v[iv]DATAD vtx1 = MatMultVec(m2,Vector([pt1[0],pt1[1],pt1[2],1.0]))DATAD< vtx2 = MatMultVec(m2,Vector([pt2[0],pt2[1],pt2[2],1.0]))DATAPά _v1 = Vector([vtx1[0]-lamp[0],vtx1[1]-lamp[1],vtx1[2]-lamp[2],1.0])DATA, _v1.normalize()DATAP| _v2 = Vector([vtx2[0]-lamp[0],vtx2[1]-lamp[1],vtx2[2]-lamp[2],1.0])DATA _v2.normalize()DATADL edgedic[(numlamp,v1,v2)] = [[vtx2[0],vtx2[1],vtx2[2]],DATA4м [vtx1[0],vtx1[1],vtx1[2]],DATAh [vtx1[0]+(_v1[0]*infinity),vtx1[1]+(_v1[1]*infinity),vtx1[2]+(_v1[2]*infinity)],DATAlѬ [vtx2[0]+(_v2[0]*infinity),vtx2[1]+(_v2[1]*infinity),vtx2[2]+(_v2[2]*infinity)]]DATAL # Find CapsDATAPҌ _v2 = Vector([vtx2[0]-lamp[0],vtx2[1]-lamp[1],vtx2[2]-lamp[2],1.0])DATA  _v2.normalize()DATA\\ _cn.append([vtx2[0]+(_v2[0]*0.001),vtx2[1]+(_v2[1]*0.001),vtx2[2]+(_v2[2]*0.001)])DATAh _cf.append([vtx2[0]+(_v2[0]*infinity),vtx2[1]+(_v2[1]*infinity),vtx2[2]+(_v2[2]*infinity)])DATA| DATAԬ _cf.reverse()DATA capnear.append(_cn)DATA< capfar.append(_cf) DATA Ռ DATA DATA4  if gRenderType.val==2 or gRenderType.val>3:DATAl p1 = face.v[0]DATA<֬ p1 = MatMultVec(m2,Vector([p1[0],p1[1],p1[2],1.0]))DATA na = 0.0DATA\ if len(LampLst)>0:DATA<׬ # Obtain the Light Vector (Vertex to light source)DATA  for lamploc in LampLst:DATATl vLight = Vector([lamploc[0]-p1[0],lamploc[1]-p1[1],lamploc[2]-p1[2],1.0])DATA vLight.normalize()DATA < _a = DotVecs(vLight,n)DATAٌ if _a<0: _a*=-1.0DATA na+= _aDATA  else:DATA<\ #No lamps, so use camera position as lamp positionDATA` vLight = Vector([obCamera.loc[0]-p1[0],obCamera.loc[1]-p1[1],obCamera.loc[2]-p1[2],1.0])DATA\ vLight.normalize()DATA(۬ na = max(DotVecs(vLight,n),0.0)DATA if na>=1.0: na = 0.99DATAL glBegin(GL_POLYGON)DATAܜ for v in face.v:DATA glTexCoord1f(na) DATA$, glVertex3f(v[0], v[1], v[2])DATA| glEnd() DATA ݼ elif gRenderType.val==3:DATA  glBegin(GL_POLYGON)DATA\ for v in face.v:DATA ޜ p2 = Mesh.verts[v.index]DATA< p2 = MatMultVec(m2,Vector([p2[0],p2[1],p2[2],1.0]))DATA$\ n = Mesh.verts[v.index].noDATA(߬ n =Vector([n[0],n[1],n[2],1.0])DATA  n = MatMultVec(invmat,n)DATAL n.normalize()DATA na=0.0DATA if len(LampLst)>0:DATA< # Obtain the Light Vector (Vertex to light source)DATA  for lamploc in LampLst:DATAT vLight = Vector([lamploc[0]-p2[0],lamploc[1]-p2[1],lamploc[2]-p2[2],0.0])DATA\ vLight.normalize()DATA0 na+= (max(DotVecs(vLight,n),0.0)*1.85)DATA  else:DATA<L #No lamps, so use camera position as lamp positionDATAd vLight = Vector([obCamera.loc[0]-p2[0],obCamera.loc[1]-p2[1],obCamera.loc[2]-p2[2],0.0])DATAL vLight.normalize()DATA0 na = (max(DotVecs(vLight,n),0.0)*1.85) DATA  if na>=1.0: na = 0.99DATAL glTexCoord1f(na) DATA$ glVertex3f(v[0], v[1], v[2])DATA glEnd() DATA , else:DATAl glBegin(GL_POLYGON)DATA4 for v in face.v: glVertex3f(v[0], v[1], v[2])DATA glEnd() DATA \ glDisable(GL_TEXTURE_1D)DATA glPopMatrix()DATA ObjLst.append(1)DATA4, shadowlines.append([edgedic,capnear,capfar])DATA  else:DATA ObjLst.append(0)DATA  glReadBuffer(GL_BACK)DATA`L glReadPixels(Viewport[0]+10, Viewport[1]+11,width,height,GL_RGB,GL_UNSIGNED_BYTE,buffImage)DATA glDisable(GL_TEXTURE_1D)DATA, DATA\ if (gShadow.val>0):DATA glRasterPos2d(10,10)DATA@ glDrawPixels(width,height,GL_RGB,GL_UNSIGNED_BYTE,shadowbuff)DATAL DATA| glEnable(GL_CULL_FACE)DATA glCullFace(GL_BACK)DATA  glColor3f(1,1,1)DATAL numobj = 0DATA for obj in obList:DATAD if (type(obj.data)==NMeshType) and ((obj.Layer & LayerMask)>0):DATA< glPushMatrix()DATA,| mat = MatrixToBuffer(obj.matrixWorld)DATA0 Mesh = NMesh.GetRawFromObject(obj.name) DATA< glMultMatrixf(mat)DATA| for face in Mesh.faces:DATA glBegin(GL_POLYGON)DATA for v in face.v:DATA$\ glVertex3f(v[0], v[1], v[2])DATA glEnd() DATA glPopMatrix()DATA, numobj+=1DATAlDATA DATA$ glClear(GL_STENCIL_BUFFER_BIT)DATA glDepthMask(GL_FALSE)DATA\ glColorMask(0,0,0,0)DATA glEnable(GL_STENCIL_TEST)DATA$ glClear(GL_STENCIL_BUFFER_BIT)DATA$< glStencilFunc(GL_ALWAYS,128,-1)DATA if (gShadow.val==1):DATA glCullFace(GL_BACK)DATA(  glStencilOp(GL_KEEP,GL_KEEP,GL_INCR)DATA\ else:DATA glCullFace(GL_FRONT)DATA, glStencilOp(GL_KEEP,GL_INCR,GL_KEEP) DATA,DATA \ for triplet in shadowlines:DATA edgelst= triplet[0]DATA for key in edgelst:DATA, edge = edgelst[key]DATAl if edge<>None:DATA i = edgeDATA glBegin(GL_QUADS)DATA,, glVertex3f(i[0][0],i[0][1],i[0][2])DATA, glVertex3f(i[1][0],i[1][1],i[1][2])DATA, glVertex3f(i[2][0],i[2][1],i[2][2])DATA,L glVertex3f(i[3][0],i[3][1],i[3][2])DATA glEnd()DATA if (gShadow.val>1):DATA, for cap in triplet[1]:DATA| glBegin(GL_POLYGON)DATA for i in cap:DATA$  glVertex3f(i[0],i[1],i[2])DATA\ glEnd()DATA for cap in triplet[2]:DATA glBegin(GL_POLYGON)DATA< for i in cap:DATA$| glVertex3f(i[0],i[1],i[2])DATA glEnd() DATA  DATA< if (gShadow.val==1):DATA(| glStencilOp(GL_KEEP,GL_KEEP,GL_DECR)DATA glCullFace(GL_FRONT)DATA  else:DATA< glCullFace(GL_BACK)DATA(| glStencilOp(GL_KEEP,GL_DECR,GL_KEEP)DATADATA  for triplet in shadowlines:DATAL edgelst = triplet[0]DATA for key in edgelst:DATA edge = edgelst[key]DATA  if edge<>None:DATAL i = edgeDATA glBegin(GL_QUADS)DATA, glVertex3f(i[0][0],i[0][1],i[0][2])DATA,, glVertex3f(i[1][0],i[1][1],i[1][2])DATA, glVertex3f(i[2][0],i[2][1],i[2][2])DATA, glVertex3f(i[3][0],i[3][1],i[3][2])DATAL glEnd()DATA if (gShadow.val>1):DATA for cap in triplet[1]:DATA glBegin(GL_POLYGON)DATAl for i in cap:DATA$ glVertex3f(i[0],i[1],i[2])DATA glEnd()DATA< for cap in triplet[2]:DATA glBegin(GL_POLYGON)DATA for i in cap:DATA$ glVertex3f(i[0],i[1],i[2])DATAl glEnd() DATA DATA glDisable(GL_CULL_FACE)DATA, glColorMask(1,1,1,1)DATA$l glStencilFunc(GL_NOTEQUAL, 0,-1)DATA4 glStencilOp(GL_REPLACE, GL_REPLACE, GL_REPLACE)DATA glColor4f(0,0,0,0.5)DATA \ glMatrixMode(GL_PROJECTION)DATA glPushMatrix()DATA glLoadIdentity()DATA , glMultMatrixf(gProjMatrix)DATA | glMatrixMode(GL_MODELVIEW)DATA glPushMatrix()DATA  glLoadIdentity()DATA L glMultMatrixf(gModelMatrix)DATA glBegin(GL_QUADS)DATA glVertex2d(0,0)DATA glVertex2d(width*4,0)DATA \ glVertex2d(width*4,height*2)DATA glVertex2d(0,height*2)DATA  glEnd()DATA < glPopMatrix()DATA  | glMatrixMode(GL_PROJECTION)DATA  glPopMatrix()DATA   glMatrixMode(GL_MODELVIEW)DATA  \ del gProjMatrix,gModelMatrixDATA  glDisable(GL_BLEND)DATA  glEnable(GL_CULL_FACE)DATA < glDepthMask(GL_TRUE)DATA | glDepthFunc(GL_LESS)DATA   glDisable(GL_STENCIL_TEST)DATA  glReadBuffer(GL_BACK)DATA` L glReadPixels(Viewport[0]+10, Viewport[1]+11,width,height,GL_RGB,GL_UNSIGNED_BYTE,shadowbuff)DATA DATA  glRasterPos2d(10,10)DATA@ L glDrawPixels(width,height,GL_RGB,GL_UNSIGNED_BYTE,buffImage)DATA DATA  if (tofile>0): DATA(, #__________________________________DATA| # Filter image DATA( #__________________________________DATA  for j in range(0,j3,w3):DATA\ for i in range(0,w3,3):DATA r = buffImage[j+i]DATA g = buffImage[j+i+1]DATA< b = buffImage[j+i+2]DATA for ci in dictfilter:DATAH if (abs(ci[0]-r)<=8) and (abs(ci[1]-g)<=8) and (abs(ci[2]-b)<=8):DATA L buffImage[j+i] = ci[0]DATA  buffImage[j+i+1] = ci[1]DATA  buffImage[j+i+2] = ci[2]DATA < breakDATA| del dictfilterDATA DATA if gFX.val:DATA, if gFXType.val == 0:DATA(l #__________________________________DATA # Pixelate DATA( #__________________________________DATAL l1 = width/gLevel.valDATA l2 = height/gLevel.valDATA lw = l2 * w3DATA, l3 = l1 * 3DATAl ll = l1 * l2DATA for j in range(0,j3,lw):DATA  for i in range(0,w3,l3):DATA L r = 0DATA  g = 0DATA  b = 0DATA$  for bj in range(j,j+lw,w3):DATA$\ for bi in range(i,i+l3,3):DATA  try:DATA  r += buffImage[bj+bi] DATA$< g += buffImage[bj+bi+1] DATA  b += buffImage[bj+bi+2]DATA except:DATA r += 128DATA\ g += 128DATA g += 128DATA  r /=llDATA  g /=llDATA \ b /=llDATA$ for bj in range(j,j+lw,w3):DATA$ for bi in range(i,i+l3,3):DATA < try:DATA | buffImage[bj+bi] = rDATA  buffImage[bj+bi+1] = gDATA  buffImage[bj+bi+2] = b DATAl except: passDATA elif gFXType.val == 1:DATA( #__________________________________DATAL # VoronoiDATA( #__________________________________DATA if gEnableMask.val:DATA` r,g,b = int(gGenCol[0][0]*255),int(gGenCol[0][1]*255),int(gGenCol[0][2]*255) #Mask colorDATA  else:DATA` r,g,b = int(gGenCol[1][0]*255),int(gGenCol[1][1]*255),int(gGenCol[1][2]*255) #Line colorDATA$| denom = max(gLevel.val*1.0,10.0)DATA j,j1,i,i1 = 0,0,0,0DATA  for j in range(0,j3,w3):DATA  \ i1 = 0DATA  for i in range(0,w3,3):DATAL  if (noise([i1/denom,j1/denom,0.0],NoiseTypes.VORONOI_CRACKLE)<0.5):DATA!l buffImage[j+i] = rDATA! buffImage[j+i+1] = gDATA"  buffImage[j+i+2] = bDATA "\ i1+=1DATA " j1+=1DATA"DATA#  del j,i,j1,i1DATA#LDATA0#| if (gbLines.val>0) or (gbSilhouette.val>0):DATA# numobj = 0DATA$ for obj in obList:DATAD$\ if (type(obj.data)==NMeshType) and ((obj.Layer & LayerMask)>0):DATA$DATA$ if ObjLst[numobj]:DATA%< glPushMatrix()DATA,%| mat = MatrixToBuffer(obj.matrixWorld)DATA0% Mesh = NMesh.GetRawFromObject(obj.name) DATA&< glMultMatrixf(mat)DATA & for face in Mesh.faces:DATA(& glPolygonMode(GL_FRONT,GL_FILL)DATA', glBegin(GL_POLYGON)DATA<'| glColor3f(gGenCol[0][0],gGenCol[0][1],gGenCol[0][2])DATA' for v in face.v:DATA((, glVertex3f(v[0], v[1], v[2])DATA(| glEnd() DATA ( if gbSilhouette.val>0:DATA )  glEnable(GL_CULL_FACE)DATA$)\ glLineWidth(gSilWidth.val)DATA() glPolygonMode(GL_BACK,GL_LINE)DATA ) glCullFace(GL_FRONT)DATA*L glBegin(GL_POLYGON)DATA@* glColor3f(gGenCol[2][0],gGenCol[2][1],gGenCol[2][2])DATA +  for vertex in face.v:DATA8+\ glVertex3f(vertex[0], vertex[1], vertex[2])DATA+ glEnd()DATA+ glCullFace(GL_BACK)DATA,L glLineWidth(1.0) DATA<, if gDoubleSided.val == 1: glDisable(GL_CULL_FACE)DATA4-  glPolygonMode(GL_FRONT_AND_BACK,GL_FILL)DATA -l DATA- glPopMatrix()DATA- numobj+=1DATA.,DATA.\ glReadBuffer(GL_BACK)DATA\. glReadPixels(Viewport[0]+10, Viewport[1]+11,width,height,GL_RGB,GL_UNSIGNED_BYTE,buff2)DATA /< mr = int(gGenCol[0][0]*255)DATA / mg = int(gGenCol[0][1]*255)DATA / mb = int(gGenCol[0][2]*255)DATA0, for j in range(0,j3,w3):DATA0| for i in range(0,w3,3):DATAL0 if (buff2[j+i]==mr) and (buff2[j+i+1]==mg) and (buff2[j+i+2]==mb): DATA 1L passDATA 1 else:DATA$1 buffImage[j+i] = buff2[j+i]DATA(2 buffImage[j+i+1] = buff2[j+i+1]DATA(2l buffImage[j+i+2] = buff2[j+i+2]DATA2 del mr,mg,mbDATA2DATA(3, if (tofile==0) and (gShadow.val>0): DATA3| for j in range(0,j3,w3):DATA3 for i in range(0,w3,3):DATA 4 if (shadowbuff[j+i]==0):DATA44l buffImage[j+i] = int(buffImage[j+i]*0.5)DATA44 buffImage[j+i+1] = int(buffImage[j+i+1]*0.5)DATA45, buffImage[j+i+2] = int(buffImage[j+i+2]*0.5)DATA5 DATA5 del buff2,w3,j3,bj3DATA5 del LayerMaskDATA6<DATA6l glPopAttrib()DATA,6 glPolygonMode(GL_FRONT_AND_BACK,GL_FILL)DATA 7  glMatrixMode(GL_PROJECTION)DATA7\ glPopMatrix()DATA7DATA7 gRendering = 0DATA8  return 0 DATA8LDATAD8|# ---------------------------------------------------------------DATA8# Function : linear_aproxDATA 9<# Inputs :DATA9|# OutPuts :DATA9# Description :DATAD9# --------------------------------------------------------------- DATA:ldef linear_aprox(lst):DATA: global gVertexLst, gTolLDATA: pi = gVertexLst[lst[0]][0]DATA ;L pf = gVertexLst[lst[-1]][0]DATA; DATA,; d = float(pf[0]-pi[0]) # x2-x1DATA8<, if d!=0: m = float(pf[1]-pi[1])/d # y2-y1/d = slope DATA< else: m = 10000000000.0DATA@< a = m;b = -1.0;c = float(pi[1]-m*pi[0]) # Compute ConstantsDATA=L denom = sqrt(a*a+b*b+c*c)DATA= DATA= e = 0.0; idxe = 0DATA >  for i in range(1,len(lst)-1):DATA>\ p = gVertexLst[lst[i]][0]DATA> if denom>0:DATA$> d = ((a*p[0])+(b*p[1])+c)/denomDATA?< else: d = 0.0DATA?| if abs(d)>=e:DATA? e = abs(d)DATA ? idxe = iDATA@<DATA@l if (e2:DATAAl l1 = lst[0:idxe+1]DATAA l2 = lst[idxe:]DATAA l1 = linear_aprox(l1)DATAB< l2 = linear_aprox(l2)DATAB l2 = l2[1:]DATAB l1.extend(l2)DATAC  return l1DATACL else: return lstDATACDATACdef bez3(p1,p2,p3,t):DATA C p = [0,0]DATA D< t2 = t*tDATA D| ct = 1 - tDATAD ct2 = ct*ctDATA,D p[0] = p1[0]*ct2 + 2*p2[0]*ct*t + p3[0]*t2DATA,E\ p[1] = p1[1]*ct2 + 2*p2[1]*ct*t + p3[1]*t2DATA E return pDATAEDATADF,# ---------------------------------------------------------------DATAF# Function : curve_aproxDATA F# Inputs :DATAG,# OutPuts :DATAGl# Description :DATADG# --------------------------------------------------------------- DATAHdef curve_aprox(lst):DATAH\ global gVertexLst, gTolCDATAH pi = gVertexLst[lst[0]][0]DATA H pf = gVertexLst[lst[-1]][0]DATAIL sz = len(lst)DATA I if sz>3:DATA I p2 = gVertexLst[lst[1]][0]DATA J p3 = gVertexLst[lst[-2]][0]DATAPJl pw = IntersectLines([pi[0],pi[1],p2[0],p2[1]],[pf[0],pf[1],p3[0],p3[1]],1)DATAJ if pw<>None:DATAK, if len(pw)==1:DATA Kl pt = [pw[0][0],pw[0][1]]DATA K d = 0DATA K di = []DATAL< for i in range(sz-1):DATA$L p = gVertexLst[lst[i]][0] DATA$L q = gVertexLst[lst[i+1]][0] DATADM, v = sqrt(((q[0]-p[0])*(q[0]-p[0]))+((q[1]-p[1])*(q[1]-p[1])))DATA M d+=vDATAM di.append(d)DATA N e = 0.0DATAN\ me = 0.0DATAN idxe = 0DATAN sz1 = len(di)-1DATAO for i in range(sz1):DATAOl ti = di[i]/dDATAO Qn = bez3(pi,pt,pf,ti)DATA$O Pn = gVertexLst[lst[i+1]][0]DATALPL v = sqrt(((Qn[0]-Pn[0])*(Qn[0]-Pn[0]))+((Qn[1]-Pn[1])*(Qn[1]-Pn[1])))DATAP if v>me:DATA Q  me=vDATAQL idxe = iDATA Q e += vDATAQ if idxe==0: idxe=sz1/2DATAR if (e2:DATAS< l1 = lst[0:idxe+1]DATAS l2 = lst[idxe:]DATAS l1 = curve_aprox(l1)DATAT l2 = curve_aprox(l2)DATATl l2 = l2[1:]DATAT l1.extend(l2)DATAT return l1DATA U, else:DATAUl return lstDATA$U else: return [lst[0],lst[-1]]DATAU return lstDATAV<DATADVl# ---------------------------------------------------------------DATAV# Function : ScanImageDATA W# Inputs :DATAW\# OutPuts :DATAW# Description :DATADW# --------------------------------------------------------------- DATA,XLdef ScanImage(width,height,buff,shflag=0):DATA(X global gVertexLst,gColordic, gColorsDATAXDATAY, alpha = 255DATAYl if shflag: alpha = 127 DATA(Y #__________________________________DATAZ  # Scanning image DATA(ZL #__________________________________DATAZDATAZ rb,gb,bb=-10,-10,-10DATA[  oldi,sz = 0,0DATA,[L # 0 1 2 3 4 5DATA4[ # gVertexLst = ((x,y),clridx,flag,prev,next,vip)DATA \  r0 = []DATA \L r1 = []DATA\ xi= 0DATA\ w3 = width * 3DATA \ top = w3-3DATA ]< idx = 0DATA ]| first = 0DATA] skipmask = 0DATA] fh = float(height)DATA^< gPercentage = 0.0DATA ^| for j in range(0,height,1):DATA ^ flag=0DATA_  rb,gb,bb=-10,-10,-10DATA _L jw = j*w3DATA_ for i in range(0,w3,3):DATA_ r=buff[jw+i]DATA` g=buff[jw+i+1]DATA`\ b=buff[jw+i+2]DATAL` if abs(r-rb)>9 or abs(g-gb)>9 or abs(b-bb)>9 or i==top or j==height-1: DATAa if flag==0: flag = 1DATA al else:DATA(a if (rb,gb,bb,alpha) in gColordic:DATA,a idx = gColordic[(rb,gb,bb,alpha)]DATAb\ else: DATA b idx = len(gColordic) DATA(b gColordic[(rb,gb,bb,alpha)]=idxDATA(c< gColors.append([rb,gb,bb,alpha])DATAc if shflag and rb>0:DATA c passDATA d else:DATA8d\ gVertexLst.append([[xi,j],idx,0,-1,-1,0]) #XiDATA<d gVertexLst.append([[(i/3),j],idx,0,-1,-1,0]) #Xf DATA e, sz = len(gVertexLst)-2DATALe| r1.append([sz,sz+1,0,idx]) #(idxXi,idxXf,numintersect,coloridx)DATAe DATAf, xi= i/3DATAfl rb,gb,bb = r,g,bDATAfDATAf if first == 0:DATAg first = 1DATA g\ r0 = r1DATAg for _i in r0:DATA8g gVertexLst[_i[0]][4] = _i[1] # xi.next = xfDATA8h< gVertexLst[_i[1]][4] = _i[0] # xf.next = xiDATAh else:DATAh for _f in r1:DATA$i  dyi = gVertexLst[_f[0]][0][0]DATA$i\ dyf = gVertexLst[_f[1]][0][0]DATAi for _i in r0:DATA(i # Check intersect range of pairsDATA$j< dxi = gVertexLst[_i[0]][0][0]DATA$j dxf = gVertexLst[_i[1]][0][0]DATAj if (_f[3]==_i[3]):DATAk if (((dyi<=dxf) and (dyi>=dxi)) or ((dyf<=dxf) and (dyf>=dxi))) or (((dxi>=dyi) and (dxi<=dyf)) or ((dxf>=dyi) and (dxf<=dyf))):DATAk # intersectionDATA8l  gVertexLst[_f[1]][4] = _f[0] # yf.next = yiDATAll if _f[2]>0:DATA8l gVertexLst[gVertexLst[_f[1]][3]][4] = _i[0] DATA,m  # yf.prev.next = xiDATAml else:DATA4m gVertexLst[_f[0]][4] = gVertexLst[_i[1]][4]DATA,n  # yi.next = xf.nextDATA8nl gVertexLst[_i[1]][4] = _f[1] # xf.next = yfDATA8n gVertexLst[_f[1]][3] = _i[1] # yf.prev = xfDATAo, _f[2]+=1DATAol # No intersection foundDATAo if _f[2] == 0:DATA8o gVertexLst[_f[0]][4] = _f[1] # yi.next = yfDATA8p\ gVertexLst[_f[1]][4] = _f[0] # yf.next = yiDATAp DATA p r0 = r1DATA q, del r1DATA ql r1 = []DATAq DATAq del r0,r1,fhDATA r del rb,gb,bb,oldi,xi,idx,szDATArl del w3,top,firstDATAr DATArDATADs # ---------------------------------------------------------------DATAs|# Function : VectorizeDATA s# Inputs :DATAs# OutPuts :DATAt<# Description :DATADt|# --------------------------------------------------------------- DATA$tdef Vectorize(width,height,colors):DATA@u< global gEnableMask,gGenCol,gCurrentFrame,gLineWidth,gVertexLstDATA,u global gVectFunc,gbLines,gSmoothVertex DATAv  DATAv< sh = bShape()DATA v| sh.Reset()DATA v movie = []DATAv placelist = []DATA,w< mr = int(gGenCol[0][0]*255) # Mask colorDATA w mg = int(gGenCol[0][1]*255)DATA w mb = int(gGenCol[0][2]*255)DATAx<DATAxlDATA$x #_________________________________DATAx # Optimize linksDATA(y, #__________________________________ DATAy| RegionVectors=[] DATAy sz = len(gVertexLst)DATAy for numv in range(sz):DATAz< v = gVertexLst[numv]DATAz| lstpts = []DATAz idx = numvDATAz while v[2]==0:DATA {< v[2] = 1DATA{| lstpts.append(idx) DATA{ idx = v[4]DATA{ v = gVertexLst[v[4]]DATA|< sz1 = len(lstpts)DATA$|| if gVectFunc.val>0 and sz1>3:DATA| sz1 = len(lstpts)DATA}  for j in range(sz1):DATA}L j1 = j-1DATA} j2 = j+1DATA} if j==sz1-1: j2=0DATA$~  p1 = gVertexLst[lstpts[j1]][0]DATA$~\ p2 = gVertexLst[lstpts[j]][0]DATA$~ p3 = gVertexLst[lstpts[j2]][0]DATA4~ v1 = Vector([(p2[0]-p1[0]),(p2[1]-p1[1])]) DATA0\ v2 = Vector([(p3[0]-p2[0]),(p3[1]-p2[1])]) DATA$ ang = AngleBetweenVecs(v1,v2)DATA΀  if ang>22.5:DATA$΀L gVertexLst[lstpts[j]][5] = 1DATA ΀ else: DATA ΀ if gSmoothVertex.val>0:DATA΁, for o in range(10):DATA(΁| p2 = gVertexLst[lstpts[j]][0] DATAl΁ gVertexLst[lstpts[j]][0] = [int((float(p2[0])*0.34) + (float(p1[0])*0.33) + (float(p3[0])*0.33)),DATAP΂l int((float(p2[1])*0.34) + (float(p1[1])*0.33) + (float(p3[1])*0.33))]DATA΂ if len(lstpts)>1:DATA΃, outlst = []DATA΃l sz1 = len(lstpts)DATA΃ for k in range(sz1):DATA΃ j = k-1 DATA$΄< p = gVertexLst[lstpts[k]][0]DATA$΄ q = gVertexLst[lstpts[j]][0]DATA8΄ d = sqrt(((q[0]-p[0]) ** 2)+((q[1]-p[1]) ** 2))DATAL΅< if d>1.0 or gVertexLst[lstpts[k]][5] == 1: outlst.append(lstpts[k])DATA΅ lstpts = outlst DATA8΅ if gVectFunc.val==2: lstpts = linear_aprox(lstpts)DATA<Ά\ elif gVectFunc.val ==3: lstpts = curve_aprox(lstpts)DATAΆ del outlstDATA·  sz1 = len(lstpts) DATA·L DATA·| # Sort by color idx DATA · if sz1>2:DATA · v = gVertexLst[lstpts[0]]DATA(ΈL RegionVectors.append([v[1],lstpts])DATAΈ del lstptsDATAΈ RegionVectors.sort() DATAΉDATA(ΉL #__________________________________DATAΉ # Create SWF fileDATA(Ή #__________________________________ DATA Ί, h = heightDATA<Ίl a = FILLSTYLEARRAY([FILLSTYLE(SOLID_FILL,[255,0,0,255])])DATA0Ί b = LINESTYLEARRAY([LINESTYLE(1,[0,0,0,255])])DATA΋<DATA΋l oldcoloridx=-1DATA΋ coloridx =-1DATA΋ colorflag=0DATAΌ, linetrans = 1DATAΌl for q in RegionVectors:DATAΌ region = q[1]DATAΌ sz = len(region)DATA΍< if len(region)>0:DATA ΍| v = gVertexLst[region[0]]DATA΍ coloridx = v[1]DATAΎ  color=colors[coloridx]DATA Ύ\ #Skip mask color regionsDATAHΎ if (color[0]==mr) and (color[1]==mg) and (color[2]==mb): continueDATAΏ DATA@ΏL # Set color flag that identify when a color idx has change DATA,Ώ if (coloridx==oldcoloridx): colorflag=0DATA ΐ else: DATAΐ\ colorflag=1DATAΐ oldcoloridx = coloridxDATAΐ DATA(Α # Set Fillstyle and line style DATAXΑl a = FILLSTYLEARRAY([FILLSTYLE(SOLID_FILL,[color[0],color[1],color[2],color[3]])])DATAΑ if gbLines.val == 1: DATAΒ< b = LINESTYLEARRAY([LINESTYLE(gLineWidth.val,[int(gGenCol[1][0]*255),int(gGenCol[1][1]*255),int(gGenCol[1][2]*255),255])])DATA Β else:DATA\Γ, b = LINESTYLEARRAY([LINESTYLE(gLineWidth.val,[color[0],color[1],color[2],color[3]])])DATAΓDATA Γ if color[3]<255: linetrans=0DATAΔ<DATAΔl curve = 0DATAΔ DATAΔ for numv in range(sz):DATA4Ε, if str(type(region[numv]))=="":DATAΕ curve = 1DATAΕ j = region[numv]DATA(Ζ  j1 = gVertexLst[region[numv+1]][0]DATA,Ζ\ else: j = gVertexLst[region[numv]][0]DATAΖ if numv==0:DATA Ζ i = jDATAΗ< if colorflag:DATApΗ| sh.SetStyleRecord(SH_MOVE+SH_FILL0+SH_FILL1+SH_LINESTYLE+SH_NEWSTYLES,i[0],h-i[1],0,1,linetrans,1,1,a,b)DATA Θ else:DATA Θ\ sh.MoveTo(i[0],h-i[1])DATA Θ f = jDATA Θ else:DATAΙ, if curve>0:DATALΙl sh.CurveTo(j[0]-f[0],(h-j[1])-(h-f[1]),j1[0]-j[0],(h-j1[1])-(h-j[1]))DATAΙ f = j1DATAΚ, curve=0DATAΚl numv+=1DATA Κ else:DATA0Κ sh.LineTo(j[0]-f[0],(h-j[1])-(h-f[1])) DATA ΛL f = jDATA8Λ if numv>0: sh.LineTo(i[0]-f[0],(h-i[1])-(h-f[1]))DATAΛDATAΜ sh.EndShape()DATAΜ\ movie = sh.GetShape()DATAΜDATA Μ del RegionVectors,gVertexLstDATA Ν del colors,sh,numv,sz,mr,mb,mgDATAΝlDATAΝ gVertexLst = []DATAΝ return movieDATAΞDATADΞL# ---------------------------------------------------------------DATAΞ# Function : TGARenderDATA Ξ# Inputs :DATAΟ<# OutPuts :DATAΟ|# Description :DATADΟ# --------------------------------------------------------------- DATAΠ,def TGARender(w,h,ax,ay):DATAΠ| global gFilename,gPathnameDATAΠ # Viewpoint dataDATA Ρ  ViewData = Buffer(GL_FLOAT,4)DATA$Ρ\ glGetFloatv(GL_VIEWPORT,ViewData)DATAΡ dx = ViewData[0]DATAΡ dy = ViewData[1]DATA΢,DATA΢\ # write to fileDATA ΢ size = w*hDATA ΢ ImageR = Buffer(GL_BYTE,size)DATA Σ, ImageG = Buffer(GL_BYTE,size)DATA Σ| ImageB = Buffer(GL_BYTE,size)DATAΣ glReadBuffer(GL_FRONT)DATA@Τ  glReadPixels(dx+10,dy+11,w,h,GL_RED,GL_UNSIGNED_BYTE,ImageR)DATA@Τ| glReadPixels(dx+10,dy+11,w,h,GL_GREEN,GL_UNSIGNED_BYTE,ImageG)DATA@Τ glReadPixels(dx+10,dy+11,w,h,GL_BLUE,GL_UNSIGNED_BYTE,ImageB)DATAΥ\DATA Υ # Save TGADATA Υ extname = gFilename.val+".tga"DATA(Φ name = sys.join(gPathname.val,extname)DATAΦl del extnameDATAΦDATAΦ Header=[chr(0)]*18DATA,Χ Header[2] = chr(2) # Uncompressed RGB DATA$Χ| Header[8] = chr(0) # X Origin LoDATA$Χ Header[9] = chr(0) # X Origin HiDATA$Ψ Header[10] = chr(0) # Y Origin LoDATA$Ψl Header[11] = chr(0) # Y Origin HiDATA(Ψ Header[12] = chr(w%256) # Width Hi DATA$Ω  Header[13] = chr(w/256) # LoDATA(Ω\ Header[14] = chr(h%256) # Height HiDATA(Ω Header[15] = chr(h/256) # LoDATA(Ω Header[16] = chr(24) # 24 bits colorDATA$ΪL Header[17] = chr(0) # Down->Top DATAΪDATAΪ try:DATAΪ f = open(name,"wb")DATAΫ< # Save HeaderDATAΫ| for byte in Header:DATAΫ f.write(byte)DATA Ϋ for x in range(h-1,-1,-1):DATAάL for y in range(w):DATAά byte = (x * w)+ yDATA ά f.write(chr(ImageB[byte]))DATA έ f.write(chr(ImageG[byte]))DATA έl f.write(chr(ImageR[byte]))DATA έ f.close()DATA$έ print "TGA file:",name," saved!"DATA ήL del x,y,fDATA$ή except IOError, (errno,strerror):DATA0ή print "I/O Error (%s): %s" % (errno,strerror)DATA,ί< del name,size,ImageR,ImageB,ImageG,HeaderDATAί del dx,dy,ViewDataDATAίDATADΰ # ---------------------------------------------------------------DATAΰ|# Function : TIFRenderDATA ΰ# Inputs :DATAΰ# OutPuts :DATAα<# Description :DATADα|# --------------------------------------------------------------- DATAαdef TIFRender(nx,ny,ax,ay):DATAβ< global gFilename,gPathnameDATAβDATAβ # Viewpoint dataDATA β ViewData = Buffer(GL_FLOAT,4)DATA$γL glGetFloatv(GL_VIEWPORT,ViewData)DATAγ dx = ViewData[0]DATAγ dy = ViewData[1]DATAδDATAδL # write to fileDATAδ size = nx*nyDATA δ ImageR = Buffer(GL_BYTE,size)DATA ε ImageG = Buffer(GL_BYTE,size)DATA εl ImageB = Buffer(GL_BYTE,size)DATAε glReadBuffer(GL_FRONT)DATA@ε glReadPixels(dx+10,dy+11,nx,ny,GL_RED,GL_UNSIGNED_BYTE,ImageR)DATADζl glReadPixels(dx+10,dy+11,nx,ny,GL_GREEN,GL_UNSIGNED_BYTE,ImageG)DATADζ glReadPixels(dx+10,dy+11,nx,ny,GL_BLUE,GL_UNSIGNED_BYTE,ImageB)DATAηLDATA(η| extname = str(gFilename.val+".tif")DATA(η name = sys.join(gPathname.val,extname)DATAθ del extnameDATAθ\DATAθ try:DATAθ f = open(name,"wb")DATAθ # Save HeaderDATA,ι< header = [chr(77),chr(77),chr(0),chr(42)]DATAι offset = size * 3 + 8;DATAι v = [chr(((offset & 4278190080) / 16777216)),chr(((offset & 16711680) / 65536)),chr(((offset & 65280) / 256)),chr(offset & 255)]DATAκ header.extend(v)DATA$κ for byte in header: f.write(byte)DATAλ,DATAλ\ # Write the binary data DATA λ for y in range(ny-1,-1,-1):DATAλ for x in range(nx):DATAμ< byte = (y * nx)+ xDATA μ| f.write(chr(ImageR[byte]))DATA μ f.write(chr(ImageG[byte]))DATA ν f.write(chr(ImageB[byte]))DATAνl DATAν # Write the footer DATAν f.write(chr(0))DATA4ξ f.write(chr(14)) # Number of directory entries DATAξ| DATAξ # Width tag, short intDATAξ c = [1,0,0,3,0,0,0,1]DATA$ο< for byte in c: f.write(chr(byte))DATA0ο f.write(chr((nx & 65280) / 256)) #Image widthDATAο f.write(chr(nx & 255))DATA< f.write(chr(0))DATA| f.write(chr(0))DATA DATA # Height tag, short int DATA< c = [1,1,0,3,0,0,0,1]DATA(| for byte in c: f.write(chr(byte))DATA4 f.write(chr((ny & 65280) / 256)) #Image heightDATA, f.write(chr(ny & 255))DATA| f.write(chr(0))DATA¼ f.write(chr(0))DATADATA$, # Bits per sample tag, short int DATA| c = [1,2,0,3,0,0,0,3]DATA(ü for byte in c: f.write(chr(byte))DATA   offset = (size * 3) + 182;DATA\ v = [chr(((offset & 4278190080) / 16777216)),chr(((offset & 16711680) / 65536)),chr(((offset & 65280) / 256)),chr(offset & 255)]DATA   for byte in v: f.write(byte)DATA\DATA$Ō # Compression flag, short int DATA  c = [1,3,0,3,0,0,0,1,0,1,0,0]DATA(, for byte in c: f.write(chr(byte))DATA0| # Photometric interpolation tag, short int DATA  c = [1,6,0,3,0,0,0,1,0,2,0,0]DATA(, for byte in c: f.write(chr(byte))DATA$| # Strip offset tag, long int DATA$ c = [1,17,0,4,0,0,0,1,0,0,0,8]DATA( for byte in c: f.write(chr(byte))DATA$l # Orientation flag, short int DATA$ȼ c = [1,18,0,3,0,0,0,1,0,1,0,0]DATA(  for byte in c: f.write(chr(byte))DATA(\ # Sample per pixel tag, short intDATA$ɬ c = [1,21,0,3,0,0,0,1,0,3,0,0]DATA( for byte in c: f.write(chr(byte))DATA(L #Rows per strip tag, short int DATAʜ c = [1,22,0,3,0,0,0,1]DATA( for byte in c: f.write(chr(byte))DATA(< f.write(chr((ny & 65280) / 256)) DATAˌ f.write(chr(ny & 255))DATA f.write(chr(0))DATA f.write(chr(0))DATA$\ #Strip byte count flag, long int DATA̬ c = [1,23,0,4,0,0,0,1]DATA( for byte in c: f.write(chr(byte))DATAL offset = size * 3DATA͌ v = [chr(((offset & 4278190080) / 16777216)),chr(((offset & 16711680) / 65536)),chr(((offset & 65280) / 256)),chr(offset & 255)]DATA < for byte in v: f.write(byte)DATA,Ό # Minimum sample value flag, short int DATA c = [1,24,0,3,0,0,0,3]DATA(< for byte in c: f.write(chr(byte))DATAό offset = (size * 3) + 188DATA v = [chr(((offset & 4278190080) / 16777216)),chr(((offset & 16711680) / 65536)),chr(((offset & 65280) / 256)),chr(offset & 255)]DATA Ќ for byte in v: f.write(byte)DATA0 # Maximum sample value tag, short int DATA< c = [1,25,0,3,0,0,0,3]DATA(ь for byte in c: f.write(chr(byte))DATA  offset = (size * 3) + 194DATA, v = [chr(((offset & 4278190080) / 16777216)),chr(((offset & 16711680) / 65536)),chr(((offset & 65280) / 256)),chr(offset & 255)]DATA  for byte in v: f.write(byte)DATA,, # Planar configuration tag, short int DATA$ӌ c = [1,28,0,3,0,0,0,1,0,1,0,0]DATA( for byte in c: f.write(chr(byte))DATA$, # Sample format tag, short int DATA| c = [1,83,0,3,0,0,0,3]DATA( for byte in c: f.write(chr(byte))DATA offset = (size * 3) + 200DATAl v = [chr(((offset & 4278190080) / 16777216)),chr(((offset & 16711680) / 65536)),chr(((offset & 65280) / 256)),chr(offset & 255)]DATA  for byte in v: f.write(byte)DATA l # End of the directory entry DATAּ c = [0,0,0,0]DATA( for byte in c: f.write(chr(byte))DATA$L # Bits for each colour channel DATAל c = [0,8,0,8,0,8]DATA( for byte in c: f.write(chr(byte))DATA(, # Minimum value for each component DATA| c = [0,0,0,0,0,0]DATA(ؼ for byte in c: f.write(chr(byte))DATA   # Maximum value per channelDATA\ c = [0,255,0,255,0,255]DATA(٬ for byte in c: f.write(chr(byte))DATA, # Samples per pixel for each channelDATA\ c = [0,1,0,1,0,1]DATA(ڜ for byte in c: f.write(chr(byte))DATA f.close()DATA, del x,y,c,v,fDATA$l print "Tiff file:",name," saved"DATA$ۼ except IOError, (errno,strerror):DATA0  print "I/O Error (%s): %s" % (errno,strerror)DATA$l del name,size,ImageR,ImageB,ImageGDATAܼ del dx,dy,ViewDataDATA DATAD,# ---------------------------------------------------------------DATAݜ# Function : SFS2SWF()DATA # Inputs :DATA# OutPuts :DATA\# Description :DATADޜ# --------------------------------------------------------------- DATA def SFS2SWF():DATA(L global gScroll2,gFilename,gPathnameDATAߜ global gMsg,gPercentageDATADATA  gMsg = "Converting SFS to SWF"DATAl gPercentage = 0.6DATA Draw()DATADATA   bkcolor=[]DATAL w = 0DATA| h = 0DATA  fps = 0DATA maxframes = 0DATA, fquality = 1DATA l floop = 1DATA frames = [] DATADATA  if len(gScroll2.datalst)>0:DATA$l numfiles = len(gScroll2.datalst)DATA  for file in gScroll2.datalst:DATA$  name = sys.join(file[1],file[0])DATA\DATA f = open(name,'rb')DATA( # _________________________________DATA # Read headerDATA(\ # _________________________________DATA data = f.read(21)DATA4 _w = REVUI32([data[0],data[1],data[2],data[3]]) DATA4L _h = REVUI32([data[4],data[5],data[6],data[7]])DATA8 _fps = REVUI32([data[8],data[9],data[10],data[11]])DATA@  _numframes = REVUI32([data[12],data[13],data[14],data[15]])DATA8| _color = [ord(data[16]),ord(data[17]),ord(data[18])]DATA _qlty = ord(data[19])DATA, _loop = ord(data[20])DATA(| # _________________________________DATA # Read DataDATA(  # _________________________________DATA \ for i in range(_numframes):DATA data = f.read(4)DATA4 sz = REVUI32([data[0],data[1],data[2],data[3]])DATAL data = f.read(sz)DATA recbits = []DATA for byte in data:DATA  recbits.append(byte)DATA\ frames.append(recbits)DATA f.close()DATA( # _________________________________DATA(< # Save first chunk of information DATA( # _________________________________DATA0 if _w>w: w=_w # keep the max size of movie DATA< if _h>h: h=_hDATA<| fps+=_fps # this will be the average of all chunksDATA4 maxframes+=_numframes # number of total framesDATA L if _qlty==0: fquality = 0DATA if _loop==0: floop=0DATA( bkcolor.append([_numframes,_color])DATA8, del _w,_h,_fps,_numframes,_color,_qlty,_loop,dataDATA DATA fps/=numfilesDATADATA, movie = []DATA(l # _________________________________DATA # Initialize SWF MovieDATA(  # _________________________________DATA \ # HeaderDATA( # _________________________________DATA4 movie = swfHeaderBlock(0,[0,0,w,h],fps,maxframes)DATA(L # _________________________________DATA  # QualityDATA( # _________________________________DATA, if (not fquality):DATAl # Do some actionsDATA( actions = swfActionToggleQualty()DATA  movie+=swfDoAction(actions) DATA(L # _________________________________DATA # Create framesDATA( # _________________________________DATA , id = 0DATAl for item in frames:DATA4 movie+= swfDefineShape3(id,RECT(0,0,w,h),item)DATA   id+=1DATA(L # _________________________________DATA # Create SpriteDATA( # _________________________________DATA , oldid = 0DATAl j = 0DATA for c in bkcolor:DATA< movie+=swfSetBackgroundColor(c[1][0],c[1][1],c[1][2])DATAL for i in range(c[0]):DATA8 if oldid>0: movie.extend(swfRemoveObject2(oldid-1))DATA` movie.extend(swfPlaceObject2(PO_MATRIX+PO_CHAR_ID,j,[0,0,0,[1.0,1.0,0.0,0.0,0.0,0.0],j]))DATA movie+=swfShowFrame()DATA  j+=1DATA oldid = jDATA8\ if oldid>0: movie.extend(swfRemoveObject2(oldid-1))DATA( # _________________________________DATA  #Loop Animation ?DATA(L # _________________________________DATA if (not floop):DATA # Do some actionsDATA  actions = swfActionStop()DATA l movie+=swfDoAction(actions)DATA movie+=swfShowFrame()DATA  movie+=swfEnd()DATAL a = len(movie)DATA SetFileLength(movie,a)DATA$ extname = gFilename.val+".swf"DATA, # write to fileDATA,l name = sys.join(gPathname.val,extname)DATA if swfWrite(name,movie):DATA gPercentage=1DATA$\ gMsg = "Error: writing file."DATA  Draw()DATA else:DATA8 print "Sequece convertion to SWF file completed."DATA| else:DATA< print "Error: Missing data files. Select at least one."DATADATA8L del bkcolor,w,h,fps,maxframes,fquality,floop,framesDATA gPercentage = 0.0DATA  gMsg = ""DATA, Draw()DATA\ returnDATADATAD# ---------------------------------------------------------------DATA,# Function : SWFRenderDATA l# Inputs :DATA# OutPuts :DATA# Description :DATAD,# --------------------------------------------------------------- DATAdef SWFRender(w,h,ax,ay):DATA$ global gMsg,gPercentage,gExportingDATA4< global gRenderType,gSequenceFileFlag,gNumSeqFilesDATAH global gGenCol,gFilename,gPathname,gStartFrame,gEndFrame,gStepFrameDATA  global gCurrentFrameDATA(L global gLoopAnimation,gFPS,gQlty,gW,gHDATA( global gColordic, gColors,gVertexLstDATA DATA gMsg = "Rendering SWF"DATA\ startime = clock()DATA DATA gExporting = 1DATA DATA < if gSequenceFileFlag.val==0:DATA movie = []DATA #Initialize SWF MovieDATA   # HeaderDATAL L movie = swfHeaderBlock(0,[0,0,w,h],gFPS.val,gEndFrame.val/gStepFrame.val)DATA  # Set Background colorDATAh  movie+=swfSetBackgroundColor(int(gGenCol[3][0]*255),int(gGenCol[3][1]*255),int(gGenCol[3][2]*255))DATA DATA   # ___________________________DATA , # Start animationDATA  l # ___________________________DATA  placelst = []DATAH  for frame in range(gStartFrame.val,gEndFrame.val+1,gStepFrame.val):DATA l start = clock()DATA,  print "Rendering Frame:",frame,"...",DATA  gCurrentFrame = frameDATA  \ # Initlialize frame variableDATA  recbits = []DATA  gPercentage = 0.6DATA, # Render frameDATAl if gRenderType.val == 0:DATA # Render Wire Frame DATA,  recbits = RenderWireFrame(1,w,h,ax,ay)DATA l else:DATA DrawObjects(1)DATA gColordic={}DATA, gColors= []DATAl gVertexLst = []DATA  ScanImage(w,h,buffImage)DATA  ScanImage(w,h,shadowbuff,1)DATA(L recbits = Vectorize(w,h,gColors)DATA #Save Define ObjectsDATA placelst.append(recbits)DATA, end = clock()DATA(l print "%.2f %s" % (end-start,"sec.")DATADATA  # ___________________________DATA< # QualityDATA | # ___________________________DATA if (not gQlty.val):DATA  # Do some actionsDATA(L actions = swfActionToggleQualty()DATA  movie+=swfDoAction(actions) DATA  # ___________________________DATA< # Create framesDATA | # ___________________________DATA  id = 0DATA  for item in placelst:DATA4L movie+= swfDefineShape3(id,RECT(0,0,w,h),item)DATA  id+=1DATA  # ___________________________DATA< # Create SpriteDATA | # ___________________________DATA$ for i in range(len(placelst)):DATA0 if i>0: movie.extend(swfRemoveObject2(i-1))DATA`| movie.extend(swfPlaceObject2(PO_MATRIX+PO_CHAR_ID,i,[0,0,0,[1.0,1.0,0.0,0.0,0.0,0.0],i]))DATA  movie+=swfShowFrame()DATA0\ if i>0: movie.extend(swfRemoveObject2(i-1))DATA  # ___________________________DATA  # Loop Animation ?DATA L # ___________________________DATA  if (not gLoopAnimation.val):DATA # Do some actionsDATA , actions = swfActionStop()DATA | movie+=swfDoAction(actions)DATA movie+=swfShowFrame()DATA movie+=swfEnd()DATA\ a = len(movie)DATA SetFileLength(movie,a)DATA$ extname = gFilename.val+".swf"DATA < # ___________________________DATA # Write to fileDATA  # ___________________________DATA, name = sys.join(gPathname.val,extname)DATA| if swfWrite(name,movie):DATA gPercentage=1DATA$  gMsg = "Error: writing file."DATA \ Draw()DATA else:DATA print "Export Completed"DATA  del placelst DATA \ else:DATAH  frames_per_file = (gEndFrame.val-gStartFrame.val+1)/gNumSeqFiles.valDATA,  for numfile in range(gNumSeqFiles.val):DATA!\ movie = []DATA$! # ___________________________DATA! # Set Sequence HeaderDATA$"< # ___________________________DATA," # 21 byte Sflender File Sequence headerDATA$" movie.extend(UI32(w)) #WidthDATA(#< movie.extend(UI32(h)) #HeightDATA8# movie.extend(UI32(gFPS.val)) #Frames per secondDATAH# movie.extend(UI32(frames_per_file/gStepFrame.val)) #Number of framesDATA@$\ movie.extend(chr(int(gGenCol[3][0]*255))) #Background RedDATA@$ movie.extend(chr(int(gGenCol[3][1]*255))) #Background GreenDATA@%< movie.extend(chr(int(gGenCol[3][2]*255))) #Background BlueDATA0% movie.extend(chr(gQlty.val)) #Quality FlagDATA4&  movie.extend(chr(gLoopAnimation.val)) #Loop FlagDATA$&l # ___________________________DATA& # Start animationDATA$& # ___________________________DATA4'L sf = (numfile*frames_per_file)+gStartFrame.valDATA' ef = sf+frames_per_fileDATA' placelst = []DATA0(< for frame in range(sf,ef+1,gStepFrame.val):DATA( start = clock()DATA,( print "Rendering Frame:",frame,"...",DATA)< gCurrentFrame = frameDATA$) # Initlialize frame variableDATA) recbits = []DATA* gPercentage = 0.6DATA*\ # Render frameDATA * if gRenderType.val == 0:DATA* # Render Wire Frame DATA,+< recbits = RenderWireFrame(1,w,h,ax,ay)DATA + else:DATA+ DrawObjects(1)DATA, gColordic={}DATA,\ gColors= []DATA, gVertexLst = []DATA , ScanImage(w,h,buffImage,1)DATA$-, ScanImage(w,h,shadowbuff,1)DATA(-| recbits = Vectorize(w,h,gColors)DATA- #Save Define ObjectsDATA . placelst.append(recbits)DATA.l end = clock()DATA,. print "%.2f %s" % (end-start,"sec.")DATA/ DATA/< for item in placelst:DATA$/ movie.extend(UI32(len(item))) DATA/ movie.extend(item)DATA0 fstart = "%d" % sfDATA0\ fend = "%d" % efDATAD0 extname = gFilename.val+fstart.zfill(3)+"-"+fend.zfill(3)+".sfs"DATA1  del fstart,fendDATA$1L # ___________________________DATA1 # Write to fileDATA$1 # ___________________________DATA,2, name = sys.join(gPathname.val,extname)DATA2 if swfWrite(name,movie):DATA2 gPercentage=1DATA(3 gMsg = "Error: writing file:"+nameDATA 3l Draw()DATA 3 breakDATA3DATA 4 print "Sequence Completed"DATA4lDATAH4 print "%s %.2f %s" % ("Total exporting time:",clock()-startime,"sec.")DATA5 DATA5< gPercentage = 0.0DATA 5| gMsg = ""DATA5 gExporting = 0DATA5 Draw()DATA6,DATAD6\# ---------------------------------------------------------------DATA6# Function : RenderDATA 7 # Inputs :DATA7L# OutPuts :DATA7# Description :DATAD7# --------------------------------------------------------------- DATA8<def Render(w,h,ax,ay):DATA@8| global gRenderType,gBSP,buffImage,gDirty,gExporting,gRenderingDATA8DATA9 if gExporting: returnDATA49\ if gRendering: return # Do not comment this line DATA9 DATA9 if gDirty==1:DATA:, if gRenderType.val == 0:DATA(:| gDirty=RenderWireFrame(0,w,h,ax,ay)DATA: else:DATA$: sc = Blender.Scene.getCurrent()DATA$;L obCamera = sc.getCurrentCamera()DATA ; del sc DATA(; if obCamera: gDirty=DrawObjects(0)DATA <, else:DATA< glDrawPixels(gW.val,gH.val,GL_RGB,GL_UNSIGNED_BYTE,buffImage)DATA>DATA> DATAD># ---------------------------------------------------------------DATA ?\# Function : drawMaskColorsDATA ?# Inputs :DATA?# OutPuts :DATA@,# Description :DATAD@l# --------------------------------------------------------------- DATA@def drawMaskColors():DATAA global gW,gPaletteDATA A\ #colorsDATAA for i in [0,1,2,3]:DATA8A glColor3f(gGenCol[i][0],gGenCol[i][1],gGenCol[i][2])DATAB< glBegin(GL_QUADS)DATAB| glVertex2d(190,94+(i*16))DATAB glVertex2d(222,94+(i*16))DATA C glVertex2d(222,105+(i*16))DATA Cl glVertex2d(190,105+(i*16))DATA C glEnd()DATAC gPalette.Draw()DATAD< del iDATADlDATADD# ---------------------------------------------------------------DATAE # Function : drawlogoDATA EL# Inputs :DATAE# OutPuts :DATAE# Description :DATADF # --------------------------------------------------------------- DATAF|def drawlogo():DATAF global glogoDATAF for k in [0,1,2]:DATAG< j = glogo[k]DATAG| clr = j[0]DATA$G glColor3f(clr[0],clr[1],clr[2])DATAH  w = 0DATAH< for face in j[2]:DATAH| glBegin(GL_TRIANGLES)DATAH for v in face:DATA I  x = j[1][v][0]*0.65 + 30DATA I\ y = j[1][v][1]*0.65 + 225DATAI glVertex2d(x,y)DATA I glEnd()DATAJ, w+=1DATAJ\ DATAJDATADJ# ---------------------------------------------------------------DATAK,# Function : drawDATA Kl# Inputs :DATAK# OutPuts :DATAK# Description :DATADL,# --------------------------------------------------------------- DATA Ldef draw():DATATL global gW,gH,gAspX,gAspY,gbLines,gLineWidth,gRenderType,gLevel,gFX,gFXType DATA\M\ global gPercentage,gbSilhouette,gSilWidth,gR,gG,gB,gEnable,gGenCol,gCreateSWF,gCreateBMPDATAXM global gFilename,gStartFrame,gEndFrame,gStepFrame,gCurrentColMask,gCurrentFrame,gMsgDATA8Nl global gRefresh,gPreview,gEnableMask,gQuit,gPaletteDATA<N global gLoopAnimation,gFPS,gQlty,gExporting,gDoubleSidedDATADO< global gMenuOption,gSequenceFileFlag,gNumSeqFiles,gSmoothVertexDATADO global gScroll1,gScroll2,gCreateSq,gPathname,gVectFunc,gTolC,gTolLDATA(P global gShadow,ShadowType,gShadowLampDATAPlDATAP # Clear windowDATA P glClearColor(0.0,0.0,0.3,1.0)DATA Q, glClear(GL_COLOR_BUFFER_BIT)DATAQ|DATAQ if gPreview.val == 0:DATA4Q Button("Render",EVENT_MENU_RENDER,5,210,115,20)DATA8RL Button("Exporter",EVENT_MENU_EXPORT,120,210,115,20)DATA<R Button("Sequencer",EVENT_MENU_SEQUENCE,235,210,115,20)DATASDATASL if gMenuOption == 0:DATAS # Render OptionsDATAS if gW.val>=256:DATAPT  gPreview = Toggle("Preview",EVENT_PREVIEW,gW.val+15,45,75,44,gPreview.val)DATAT else:DATAHT gPreview = Toggle("Preview",EVENT_PREVIEW,260,45,75,44,gPreview.val)DATAU, DATAU\ if gPreview.val == 0:DATADU gRefresh = Button("Refresh Data",EVENT_REFRESH,230,173,120,15)DATAV  # Width and HeightDATAlVL gW = Number("W: ",EVENT_WIDTH,3,174,50,14,gW.val,16,1024,"The image width in pixels (adjusted to 2^n)")DATA`V gH = Number("H: ",EVENT_HEIGHT,56,174,50,14,gH.val,16,1024,"The image height in scanlines")DATAW| #Aspect RatioDATA`W gAspX = Number("AX:",EVENT_ASPX,3,157,50,14,gAspX.val,1,200,"The horizontal aspect ratio")DATA`XL gAspY = Number("AY:",EVENT_ASPY,56,157,50,14,gAspY.val,1,200,"The vertical aspect ratio")DATAX #Type of RenderDATAY gRenderType = Menu("Render Type:%t|Wired%x0|Flat%x1|Shade%x2|Toon%x3|Stripes 1%x4|Stripes 2%x5|Stripes 3%x6",EVENT_RENDER_TYPE,110,174,113,14,gRenderType.val)DATAY if gRenderType.val>0:DATAZ< #Special effect FlagDATA@Z gFX = Toggle("Filter",EVENT_PIXELATE,110,158,40,14,gFX.val)DATAdZ gFXType = Menu("Type Filter:%t|Pixelate%x0|Voronoi%x1",EVENT_LEVEL,152,158,70,14,gFXType.val)DATAx[ gLevel = Menu("Level:%t|2%x2|4%x4|8%x8|16%x16|24%x24|32%x32|48%x48|64%x64",EVENT_LEVEL,229,158,50,14,gLevel.val)DATAh\, gShadow = Menu("Shadow:%t|Shadow Off%x0|Z Pass%x1|Z Fail%x2",EVENT_SHADOW,3,92,103,14,gShadow.val)DATA\ DATA\ #Number of colorsDATA], if gPalette.visible:DATA]l gCurrentColMask = Menu("Colors:%t|1%x1|2%x2|3%x3|4%x4|5%x5|8%x8|16%x16|Custom%x32",EVENT_CHANGE_MASK,15,75,15,10,gCurrentColMask.val)DATA^, DATA^\ for i in [0,1,2,3]:DATAL^ gEnable[i] = Toggle(" ",EVENT_E0+i,179,94+(17*i),10,10,gEnable[i].val)DATA_, #Lines optionsDATAD_l gbLines = Toggle("Lines",EVENT_LINES,110,109,67,14,gbLines.val)DATAX_ gbSilhouette = Toggle("Silhouette",EVENT_SILHOUETTE,110,125,67,14,gbSilhouette.val)DATA``\ # Color of mask, this color will be transparent and not will be consider when vectorizingDATAH` gEnableMask = Toggle("Mask",EVENT_MASK,110,92,67,14,gEnableMask.val)DATA,a\ #Lines and Background colors and stylesDATA@a gR = Slider("R:",EVENT_COLOR,230,122,120,14,gR.val,0.0,1.0)DATA@b, gG = Slider("G:",EVENT_COLOR,230,107,120,14,gG.val,0.0,1.0)DATA@b gB = Slider("B:",EVENT_COLOR,230,92,120,14,gB.val,0.0,1.0)DATAPc  gLineWidth = Slider("Width:",EVENT_LINE_W,3,109,103,14,gLineWidth.val,1,7)DATALc gSilWidth = Slider("Width:",EVENT_SIL_W,3,125,103,14,gSilWidth.val,1,7)DATATd  gDoubleSided = Toggle("Double side",EVENT_NONE,3,140,103,14,gDoubleSided.val)DATAd #Custom DrawDATAd drawMaskColors()DATAe  if gW.val>=256:DATA<eL gQuit = Button("Quit",EVENT_QUIT,gW.val+15,25,75,15)DATA e else:DATA4e gQuit = Button("Quit",EVENT_QUIT,260,25,75,15)DATAf\DATAf glColor3f(0.0,0.0,1.0)DATAf glBegin(GL_QUADS)DATAg glVertex2d(3,190)DATAg\ glVertex2d(3,209)DATAg glVertex2d(350,209)DATAg glVertex2d(350,190)DATA h glEnd()DATAh\ glColor3f(1.0,1.0,1.0)DATAh glRasterPos2d(140,195)DATAh Text("Render Options")DATAiL glColor3f(1.0,1.0,1.0)DATAi glRasterPos2d(110,145)DATAi Text("Background")DATA@j, Button(" ",EVENT_PARAMS,7,192,12,15,"Load/Save Parameters")DATAjDATAj else:DATA0j Render(gW.val,gH.val,gAspX.val,gAspY.val)DATATk\ gCreateTGA = Button("TGA",EVENT_CREATE_BMP,gW.val+15,110,75,15,"Save TGA file")DATAXk gCreateTIFF = Button("TIFF",EVENT_CREATE_TIF,gW.val+15,130,75,15,"Save TIFF file")DATAl\DATAl elif gMenuOption == 1:DATAl DATAl # SWF Render optionsDATALm< gLoopAnimation = Toggle("Loop",EVENT_LOOP,5,158,35,14,gLoopAnimation.val)DATA<m gQlty = Toggle("Qlty",EVENT_QLTY,42,158,35,14,gQlty.val)DATATn, gFPS = Number("FPS:",EVENT_FPS,80,158,70,14,gFPS.val,1,60,"Frames per second")DATAdn gStartFrame = Number("Start",EVENT_STARTFRAME,5,140,65,14,gStartFrame.val,1,18000,"Start Frame")DATA\o< gEndFrame = Number("End",EVENT_ENDFRAME,72,140,65,14,gEndFrame.val,1,18000,"End Frame")DATA`o gStepFrame = Number("S:",EVENT_STEPFRAME,140,140,35,14,gStepFrame.val,1,100,"Step Frame")DATAp\ gVectFunc = Menu("Function:%t|None%x0|Simple%x1|Linear%x2|Curves%x3",EVENT_VEC_TYPE,190,156,79,15,gVectFunc.val,"Choose a vectorize function.")DATAlq if gVectFunc.val==2: gTolL = Number("T:",EVENT_TOLERANCE,272,156,75,15,gTolL.val,0.001,0.05,"Tolerance")DATAlq elif gVectFunc.val==3: gTolC = Number("T:",EVENT_TOLERANCE,272,156,75,15,gTolC.val,1.0,20.0,"Tolerance")DATAhr\ gSmoothVertex = Toggle("Smooth",EVENT_NONE,190,138,79,15,gSmoothVertex.val,"Smooth region vertex")DATAXr Button("Reset Frames ",EVENT_RESETFRAMES,5,123,170,15,"Reset Frames Blender Values.")DATA sl if gSequenceFileFlag.val==0:DATAds gSequenceFileFlag = Toggle("Save as SWF file",EVENT_SEQ_FLAG,4,90,235,15,gSequenceFileFlag.val)DATAXtL gCreateSWF = Button("Export SWF",EVENT_CREATE_SWF,270,45,75,44,"Render SWF to file")DATAt else:DATAt gSequenceFileFlag = Toggle("Save as sequence file (.SFS )",EVENT_SEQ_FLAG,4,90,197,15,gSequenceFileFlag.val,"Automatically creates N number of sequence files")DATAu gNumSeqFiles=Menu("Number Sequence Files:%t|1%x1|2%x2|3%x3|4%x4|5%x5",EVENT_NUM_SEQ_F,201,90,35,15,gNumSeqFiles.val,"Number of sequence files")DATAXv gCreateSWF = Button("Export SFS",EVENT_CREATE_SWF,270,45,75,44,"Render SWF to file")DATAhw  gPathname = String("Pathname:",EVENT_PATHNAME,4,70,235,15,gPathname.val,1024,"Set the path name.")DATA\w gFilename = String("Filename:",EVENT_FILENAME,4,52,235,15,gFilename.val,1024,"Filename")DATA<x, Button("...",EVENT_BROWSE,239,50,15,35,"Browse Files")DATA4x gQuit = Button("Quit",EVENT_QUIT,270,25,75,15)DATAxDATAy, glColor3f(0.0,0.0,1.0)DATAy| glBegin(GL_QUADS)DATAy glVertex2d(3,190)DATAy glVertex2d(3,209)DATAz< glVertex2d(350,209)DATAz| glVertex2d(350,190)DATA z glEnd()DATAz glColor3f(1.0,1.0,1.0)DATA{L glRasterPos2d(10,177)DATAH{ Text("SWF Parameters: Vectorize Parameters:")DATA{ glRasterPos2d(140,195)DATA|L Text("Export Options")DATA| glRasterPos2d(10,110)DATA@| Text("A 3D View should be visible to export an animation.")DATA}LDATA}| elif gMenuOption ==2:DATA8} Button(">",EVENT_ADD_ITEM,165,154,30,17,"Add Item")DATA<~ Button("<",EVENT_DEL_ITEM,165,134,30,17,"Delete Item")DATA<~ Button(">>",EVENT_ADD_ALL,165,114,30,17,"Add all items")DATA@~ Button("<<",EVENT_REMOVE_ALL,165,94,30,17,"Remove all items")DATAXl Button("Get .SFS Files",EVENT_GET_FILE,10,171,150,15,"Get a sequence file (.SFS)")DATA DATAdπ Button("Create SWF",EVENT_SEQUENCE_SWF,270,45,75,44,"Create unique SWF with all sequence files")DATAhπ gPathname = String("Pathname:",EVENT_PATHNAME,4,70,235,15,gPathname.val,1024,"Set the path name.")DATA\ρ< gFilename = String("Filename:",EVENT_FILENAME,4,52,235,15,gFilename.val,1024,"Filename")DATA<ρ Button("...",EVENT_BROWSE,239,50,15,35,"Browse Files")DATAς< if gW.val>=256:DATA8ς| gQuit = Button("Quit",EVENT_QUIT,gW.val+15,25,75,15)DATAς else:DATA4σ  gQuit = Button("Quit",EVENT_QUIT,260,25,75,15)DATAσl glColor3f(0.0,0.0,1.0)DATAσ glBegin(GL_QUADS)DATAσ glVertex2d(3,190)DATAτ< glVertex2d(3,209)DATAτ| glVertex2d(350,209)DATAτ glVertex2d(350,190)DATA τ glEnd()DATAυ< glColor3f(1.0,1.0,1.0)DATAυ glRasterPos2d(130,195)DATAυ Text("Sequence Options")DATAφ, gScroll1.Draw()DATAφl gScroll2.Draw()DATA φ glFlush()DATAφDATAχDATAχL if gPreview.val == 0:DATAχ glColor3f(0.7,0.3,0.0)DATAχ glBegin(GL_QUADS)DATAψ glVertex2d(3,230)DATAψ\ glVertex2d(3,250)DATAψ glVertex2d(348,250)DATAψ glVertex2d(348,230)DATA ω glEnd()DATAω\ DATAω glColor3f(0.0,0.0,0.0)DATAω glRasterPos2d(175,234)DATA(ϊ, Text("Copyright (c) 2004, E.Aguirre")DATAϊ| drawlogo()DATAϊ glColor3f(1.0,1.0,1.0)DATAϋ  glRasterPos2d(20,237)DATAϋL glColor3f(1.0,1.0,1.0)DATA(ϋ Text("v2.4 S f l e n d e r")DATAϋ glColor3f(1.0,1.0,1.0)DATAό< glRasterPos2d(3,10)DATALό| Text("*Macromedia(R) and Flash(TM) are trademarks of Macromedia, Inc.")DATA ό glFlush()DATAύ< DATAύl #Draw Progress BarDATAύ if (gPercentage>0):DATAύ glColor3f(1.0,0.5,0.0)DATAώ< glBegin(GL_QUADS)DATAώ| glVertex2d(3,30)DATAώ glVertex2d(3,40)DATA(ώ glVertex2d(3+(gPercentage*100),40)DATA(ϏL glVertex2d(3+(gPercentage*100),30)DATA Ϗ glEnd()DATAϏ glColor3f(1.0,1.0,1.0)DATAϐ, glRasterPos2d(3,32)DATAϐl Text(gMsg)DATA4ϐ if gExporting: Text(" Frame %d" % gCurrentFrame)DATAϑ  else:DATAϑ< if gPreview.val == 0:DATAϑ| glRasterPos2d(3,30)DATA0ϑ Text("Exporter for Macromedia(R) Flash(TM)")DATAϒ glColor3f(1.0,1.0,1.0)DATAϒ\DATAϒDATADϒ# ---------------------------------------------------------------DATAϓ,# Function : eventDATA ϓl# Inputs :DATAϓ# OutPuts :DATAϓ# Description :DATADϔ,# --------------------------------------------------------------- DATAϔdef event(evt,val):DATAϔ global gMouseXY,gMBDATA ϕ if (evt == QKEY and not val):DATA ϕl Exit()DATAϕ if (evt == MOUSEX):DATAϕ gMouseXY[0] = valDATAϖ, elif (evt == MOUSEY): DATAϖl gMouseXY[1] = valDATAϖ OnMouseMove()DATAϖ elif (evt == LEFTMOUSE):DATAϗ< gMB[0] = valDATAϗ| if val: OnMouseMove()DATAϗ elif (evt == MIDDLEMOUSE):DATAϘ  gMB[1] = valDATAϘL if val: OnMouseMove()DATAϘ elif (evt == RIGHTMOUSE):DATAϘ gMB[2] = valDATAϙ if val: OnMouseMove()DATAϙ\ DATADϙ# ---------------------------------------------------------------DATAϙ# Function : OnMouseMoveDATA ϚL# Inputs :DATAϚ# OutPuts :DATAϚ# Description :DATADϛ # ---------------------------------------------------------------DATAϛ|def OnMouseMove():DATA4ϛ global gMB,gMouseXY,gOldXY,gPalette, gMenuOptionDATAϜ global gScroll1, gScroll2DATAϜl # Viewpoint dataDATA Ϝ ViewData = Buffer(GL_FLOAT,4)DATA$Ϝ glGetFloatv(GL_VIEWPORT,ViewData)DATA ϝL dx = gMouseXY[0] - ViewData[0]DATA ϝ dy = gMouseXY[1] - ViewData[1]DATAϝ DATAϞ if gMenuOption == 0:DATA(Ϟ\ if (gPalette.OnMouseMove(dx,dy,gMB)):DATA Ϟ Draw()DATAϞ elif gMenuOption == 2:DATA(ϟ< if (gScroll1.OnMouseMove(dx,dy,gMB)):DATAϟ passDATA(ϟ if (gScroll2.OnMouseMove(dx,dy,gMB)):DATAϠ  passDATAϠ<DATAϠl del dx,dy,ViewDataDATAϠ gOldXY[0] = gMouseXY[0]DATAϠ gOldXY[1] = gMouseXY[1]DATAϡL returnDATAϡ|DATADϡ# ---------------------------------------------------------------DATAϢ# Function : SetColorsMaskDATA Ϣl# Inputs :DATAϢ# OutPuts :DATAϢ# Description :DATADϣ,# ---------------------------------------------------------------DATAϣdef SetColorsMask(num):DATAϣ global gPaletteDATA(Ϥ if num<32: gPalette.maxcolors = numDATAϤl else:DATAϤ gPalette.maxcolors = 16DATA Ϥ num = 1 DATAϥ, gPalette.ResetContent()DATAϥ| denom = num-1DATAϥ if denom>0:DATA(ϥ delta = gPalette.palrc.Width()/denomDATAϦL else:DATA$Ϧ| delta = gPalette.palrc.Width()DATAϦ gPalette.curidx=0DATAϧ  for j in range(num):DATAϧL if denom>0:DATA ϧ i = float(j)/float(denom)DATAϧ else: i = 0DATA$Ϩ px = gPalette.palrc.L+ (delta*j)DATA0Ϩl py = gPalette.wndrc.B + (gPalette.vs/2)+5 DATAϨ gPalette.curidx+=1DATA8ϩ  w = CGHandle(i,gPalette.curidx,px-3,py+8,px+3,py-8)DATAϩl gPalette.AddHandle(w)DATAϩ del wDATAϩ del i,j,deltaDATA Ϫ Redraw()DATAϪ\DATADϪ# ---------------------------------------------------------------DATAϪ# Function : GetFilenameDATA ϫL# Inputs :DATAϫ# OutPuts :DATAϫ# Description :DATADϬ # --------------------------------------------------------------- DATAϬ|def GetFilename(name):DATAϬ global gFilename,gPathnameDATA(ϭ  n = sys.splitext(sys.basename(name))DATAϭ\ gFilename.val = n[0]DATA$ϭ gPathname.val = sys.dirname(name)DATAϭ del nDATAϮDATADϮL# ---------------------------------------------------------------DATAϮ# Function : SaveParamsDATA ϯ # Inputs :DATAϯL# OutPuts :DATAϯ# Description :DATADϯ# --------------------------------------------------------------- DATAϰ<def SaveParameters(name):DATALϰ global gW,gH,gAspX,gAspY,gSilWidth,gLineWidth,gGenCol,gRenderType,gPaletteDATAϱ  f = open(name,'w')DATAϱL buff = "%d\n" % gW.valDATAϱ f.write(buff)DATAϱ buff = "%d\n" % gH.valDATAϲ  f.write(buff)DATAϲL buff = "%d\n" % gAspX.valDATAϲ f.write(buff)DATAϲ buff ="%d\n" % gAspY.valDATAϳ, f.write(buff)DATA ϳl buff = "%d\n" % gSilWidth.valDATAϳ f.write(buff)DATA ϳ buff = "%d\n" % gLineWidth.valDATAϴL f.write(buff)DATA$ϴ buff = "%d\n" % gRenderType.valDATAϴ f.write(buff)DATAϵ for i in [0,1,2,3]:DATA ϵ\ buff = "%f\n" % gGenCol[i][0]DATAϵ f.write(buff)DATA ϵ buff = "%f\n" % gGenCol[i][1]DATA϶< f.write(buff)DATA ϶| buff = "%f\n" % gGenCol[i][2]DATA϶ f.write(buff)DATA Ϸ  lst = gPalette.GetIntenLst()DATAϷ\ sz = len(lst)DATAϷ buff = "%d\n" % szDATAϷ f.write(buff)DATAϸ for i in lst:DATAϸ\ buff ="%f\n" % iDATAϸ f.write(buff)DATA ϸ f.close DATAϹDATADϹL# ---------------------------------------------------------------DATAϹ# Function : GetParamsDATA Ϲ# Inputs :DATAϺ<# OutPuts :DATAϺ|# Description :DATADϺ# --------------------------------------------------------------- DATAϻ,def GetParameters(name):DATALϻ| global gW,gH,gAspX,gAspY,gSilWidth,gLineWidth,gGenCol,gRenderType,gPaletteDATAϻ f = open(name,'r')DATAϼ< buff = f.readline()DATAϼ| gW.val= int(buff)DATAϼ buff = f.readline()DATAϼ gH.val= int(buff)DATAϽ< buff = f.readline()DATAϽ| gAspX.val= int(buff)DATAϽ buff = f.readline()DATAϽ gAspY.val= int(buff)DATAϾ< buff = f.readline()DATAϾ| gSilWidth.val= int(buff)DATAϾ buff = f.readline()DATAϿ  gLineWidth.val= int(buff)DATAϿ\ buff = f.readline()DATAϿ gRenderType.val= int(buff)DATAϿ for i in [0,1,2,3]:DATA, buff = f.readline()DATA l gGenCol[i][0] = float(buff)DATA buff = f.readline()DATA  gGenCol[i][1] = float(buff)DATAL buff = f.readline()DATA  gGenCol[i][2] = float(buff)DATA  lst = []DATA buff = f.readline()DATA\ sz = int(buff)DATAœ for i in range(sz):DATA buff = f.readline()DATA lst.append(float(buff))DATA l gPalette.SetLstfromInten(lst)DATAü DATA  f.close DATA0, if gRenderType.val==2 or gRenderType.val == 3:DATAČ gPalette.Visible()DATA else: gPalette.Visible(0)DATA DATADL# ---------------------------------------------------------------DATAż# Function : beventDATA # Inputs :DATA<# OutPuts :DATA|# Description :DATADƼ# --------------------------------------------------------------- DATA,def bevent(evt):DATA0l global gCurrentColMask,gRenderType,gPaletteDATA8 global gR,gB,gG,gGenCol,gLastEnable,gW,gH,gAspX,gAspYDATAH, global gCurrentFrame,gStartFrame,gEndFrame,gPalette,gPreview,gDirtyDATA0Ȝ global gMenuOption,gScroll1,gScroll2,gPathnameDATA global gShadow,gShadowLampDATAL Repaint = 0DATAɌ if (evt == EVENT_QUIT):DATA  Exit()DATA$ elif (evt == EVENT_MENU_RENDER): DATAl gMenuOption = 0DATAʬ Repaint = 1DATA$ elif (evt == EVENT_MENU_EXPORT):DATA< gMenuOption = 1DATA| Repaint = 1DATA$˼ elif (evt == EVENT_MENU_SEQUENCE):DATA  gMenuOption = 2DATAL Repaint = 1DATǍ elif (evt == EVENT_WIDTH):DATA if (gW.val % 8)>0:DATA  gW.val = ((gW.val/8)*8)+8DATAl Repaint = 1DATA ͬ elif (evt == EVENT_HEIGHT):DATA Repaint = 1DATA$< elif (evt == EVENT_CHANGE_MASK):DATA(Ό SetColorsMask(gCurrentColMask.val)DATAX elif (evt == EVENT_E0) or (evt == EVENT_E1) or (evt == EVENT_E2) or (evt == EVENT_E3):DATA\ idx = evt - EVENT_E0DATA$Ϝ gEnable[gLastEnable.val].val = 0DATA gEnable[idx].val = 1DATA, gLastEnable.val = idxDATAl gR.val = gGenCol[idx][0]DATAм gG.val = gGenCol[idx][1]DATA  gB.val = gGenCol[idx][2]DATA\ Repaint = 1DATA8ќ elif (evt == EVENT_LINE_W) or (evt == EVENT_SIL_W):DATA Repaint = 1DATA< elif (evt == EVENT_COLOR):DATA(Ҍ gGenCol[gLastEnable.val][0]=gR.valDATA( gGenCol[gLastEnable.val][1]=gG.valDATA(, gGenCol[gLastEnable.val][2]=gB.valDATA| Repaint = 1DATA$Ӽ elif (evt == EVENT_RENDER_TYPE):DATA4  if gRenderType.val==2 or gRenderType.val == 3:DATAl gPalette.Visible()DATAԬ else: gPalette.Visible(0)DATA$ gCurrentFrame = gStartFrame.valDATAL Repaint = 1DATA Ռ elif (evt == EVENT_REFRESH):DATA$ gCurrentFrame = gStartFrame.valDATA, Repaint = 1DATA$l elif (evt == EVENT_CREATE_SWF):DATA0ּ SWFRender(gW.val,gH.val,gAspX.val,gAspY.val)DATA$ elif (evt == EVENT_CREATE_BMP):DATA0l TGARender(gW.val,gH.val,gAspX.val,gAspY.val)DATA$ elif (evt == EVENT_CREATE_TIF):DATA0 TIFRender(gW.val,gH.val,gAspX.val,gAspY.val)DATA$| elif (evt == EVENT_STARTFRAME):DATA$ gCurrentFrame = gStartFrame.valDATAH if gEndFrame.val < gStartFrame.val: gEndFrame.val = gStartFrame.valDATAٌ # Set Current FrameDATA( Blender.Set('curframe',gCurrentFrame)DATA Repaint = 1DATA \ elif (evt == EVENT_ENDFRAME):DATAHڬ if gEndFrame.val < gStartFrame.val: gEndFrame.val = gStartFrame.valDATA Repaint = 1DATA$\ elif (evt == EVENT_RESETFRAMES):DATA,۬ gStartFrame.val = Blender.Get('staframe')DATA,  gEndFrame.val = Blender.Get('endframe')DATAl Repaint = 1DATA ܬ elif (evt == EVENT_PREVIEW):DATA( gCurrentFrame=Blender.Get('curframe')DATA$L if gPreview.val == 1: gDirty = 1DATAݜ Repaint = 1DATA$ elif (evt == EVENT_VEC_PREVIEW):DATA, Repaint = 1DATA$l elif (evt==EVENT_SEQUENCE_SWF): DATA ޼ SFS2SWF()DATA  elif (evt ==EVENT_ADD_ITEM):DATA L str = gScroll1.GetSelected()DATAߜ if str<>None:DATA( gScroll1.DelItem(gScroll1.selidx)DATA$, gScroll2.AddItem(str[0],str[1])DATA| Repaint = 1DATA  elif (evt ==EVENT_DEL_ITEM): DATA   str = gScroll2.GetSelected()DATA\ if str<>None:DATA( gScroll2.DelItem(gScroll2.selidx)DATA$ gScroll1.AddItem(str[0],str[1])DATA< Repaint = 1DATA | elif (evt ==EVENT_REMOVE_ALL):DATA  for x in gScroll2.datalst:DATA  gScroll1.AddItem(x[0],x[1])DATAl gScroll2.ClearLst()DATA gScroll2.selidx = -1DATA Repaint = 1DATA , elif (evt ==EVENT_ADD_ALL): DATA | for x in gScroll1.datalst:DATA  gScroll2.AddItem(x[0],x[1])DATA gScroll1.ClearLst()DATA\ gScroll1.selidx = -1DATA Repaint = 1DATA  elif (evt ==EVENT_GET_FILE):DATA$, lstfiles = listdir(gPathname.val)DATA| gScroll1.ClearLst()DATA for file in lstfiles:DATA n = sys.splitext(file)DATA$L if n[1]==".sfs" or n[1]==".SfS":DATA, gScroll1.AddItem(file,gPathname.val)DATA  del nDATA< del lstfilesDATA| Repaint = 1DATA  elif (evt == EVENT_BROWSE):DATA8  Blender.Window.FileSelector(GetFilename,"Get File")DATATl elif (evt == EVENT_SEQ_FLAG) or (evt==EVENT_NUM_SEQ_F) or (evt == EVENT_VEC_TYPE):DATA Repaint = 1DATA , elif (evt == EVENT_PARAMS):DATA@| ans = Blender.Draw.PupMenu("Parameters%t|Save%x1|Restore%x2")DATA if ans==1:DATAD, Blender.Window.FileSelector(SaveParameters,"Save *.sfp File") DATA elif ans==2:DATA@ Blender.Window.FileSelector(GetParameters,"Get *.sfp File")DATA L elif (evt == EVENT_SHADOW):DATA passDATA$ elif (evt == EVENT_LAMP_SHADOW):DATA passDATAL DATA| if Repaint == 1: Draw()DATAD# --------------------------------------------------------------DATA<#DATA$l# Definition of global variablesDATA#DATAD# --------------------------------------------------------------DATA\DATA(gAspX = Create(100) # X aspect ratioDATA,gAspY = Create(100) # Y aspect rationDATA< DATA8lgbLines = Create(0) # Flag to Draw or not the linesDATA@gbSilhouette = Create(1) # Flag to Draw or not the silhouetteDATA<gB = Create(1.0)DATA(|buffImage = None # Image Buffer DATA(shadowbuff = None # Shadow BufferDATA DATA4LgCreateSWF = Create(0) # Flag button to create swfDATA4gCreateBMP = Create(0) # Flag button to save tgaDATA4 gCreateTIFF = Create(0) # Flag button to save tiffDATAlgCurrentFrame = 1DATA8gCurrentColMask = Create(3) # Current mask color idxDATA gCreateSq = Create(0)DATALgColordic = {}DATA gColors=[]DATA DATA gDirty = 0DATA@<gDoubleSided = Create(0) #Draw Double side faces (backfaces)DATA DATA<gEnableMask = Create(0) # Flag to use color mask or not DATALgExporting = 0DATA4gEnable = [Create(0),Create(0),Create(0),Create(1)]DATAgEndFrame = Create(1)DATA(,gEndFrame.val = Blender.Get('endframe')DATA|DATA<gFX = Create(0) # Flag button to special effect imageDATA(gFXType = Create(0) # Type of effectDATAlgFilename = Create("demo")DATAgFPS = Create(24)DATADATA,gG = Create(1.0)DATADlgGenCol = [[1.0,0.0,1.0],[0.0,0.0,0.0],[0.0,0.0,0.0],[1.0,1.0,1.0]]DATADATA( gH = Create(256) # Height of the imageDATA\DATA0gLastEnable = Create(3) # Last color toggleDATAgLevel = Create(16)DATA(,vLight = Vector() # Light vector fromDATA(|gLineWidth = Create(1) # Line widthDATAgLoopAnimation = Create(1)DATADATALgMB = [0,0,0]DATAgMenuOption = 0DATAgMouseXY = [0,0]DATA8 gMsg = "" # Message to be display in progress barDATAlDATA4vNormal = Vector() # Normal vector of the face DATA@gNumSeqFiles = Create(1) # Number of Sequences files to create DATAlDATAgOldXY = [0,0]DATADATA  gPathname = Create("c:\swf")DATA(\gPalette = CPickPalette(5,90,260,45,5)DATAgPalette.ResetContent()DATAgPalette.Visible(0)DATA8\gPercentage = 0.0 # Percentage of the progress barDATAgPreview= Create(0)DATADATAgQlty = Create(1)DATA<gQuit = Create(0)DATA|DATAgRefresh = Create(0)DATAdgRenderType = Create(0) # Render Type: 0 - Wire Frame, 1 - Flat, 2 - Shade, 3 - Shade, 4 -PixelateDATA|gRendering = 0DATAgR = Create(1.0)DATA DATA(,gScroll1 = CVScrollLst(10,90,150,80)DATA|gScroll1.ClearLst()DATA4gScroll2 = CVScrollLst(200,90,150,80,[0.7,0.3,0.0])DATAgScroll2.ClearLst()DATA \gSequenceFileFlag = Create(0)DATAgShadow = Create(0)DATAgShadowLamp = ""DATA$,SetColorsMask(gCurrentColMask.val)DATA,|gSilWidth = Create(3) # Silhouette widthDATAgSmoothVertex = Create(0)DATA,gStartFrame = Create(1)DATA,lgStartFrame.val = Blender.Get('staframe')DATAgStepFrame = Create(1)DATA DATAT<vSight = Vector() # Sight vector formed by the camera position and a face point DATADATAgTolL = Create(0.01) DATA,gTolC = Create(10.0)DATAlDATAgVertexLst = []DATAgVectFunc = Create(1)DATA DATA( LgW = Create(256) # Width of the imageDATA DATA  glogo = [[[0.0, 0.0, 1.0, 1.0],DATAT [[ 45 , 15 ] , [ 17 , 7 ] , [ 0 , 5 ] ,[ 77 , 31 ] , [ 103 , 50 ] , [ 120 , 73 ] ,DATA\ [ 129 , 96 ] , [ 130 , 116 ] , [ 124 , 133 ] ,[ 112 , 146 ] , [ 98 , 152 ] , [ 81 , 152 ] ,DATAX ,[ 60 , 146 ] , [ 40 , 137 ] , [ 23 , 125 ] ,[ 11 , 109 ] , [ 4 , 92 ] , [ 1 , 75 ] ,DATAT [ 2 , 61 ] , [ 6 , 51 ] , [ 19 , 38 ] ,[ 27 , 37 ] , [ 34 , 38 ] , [ 37 , 40 ] ,DATAT ,[ 30 , 39 ] , [ 20 , 40 ] , [ 11 , 46 ] ,[ 2 , 70 ] , [ 5 , 89 ] , [ 12 , 108 ] ,DATA\ [ 26 , 124 ] , [ 42 , 136 ] , [ 59 , 143 ] ,[ 77 , 147 ] , [ 95 , 148 ] , [ 110 , 143 ] ,DATA\ <[ 122 , 133 ] , [ 128 , 116 ] , [ 127 , 95 ] ,[ 118 , 73 ] , [ 101 , 51 ] , [ 75 , 33 ] ,DATAP [ 40 , 18 ] , [ 6 , 9 ] , [ 11 , 43 ] ,[ 5 , 56 ] , [ 30 , 10 ] , [ 6 , 6 ] ,DATA\L[ 61 , 22 ] , [ 91 , 40 ] , [ 112 , 61 ] ,[ 125 , 84 ] , [ 130 , 106 ] , [ 128 , 125 ] ,DATA\[ 118 , 140 ] , [ 105 , 150 ] , [ 90 , 152 ] ,[ 70 , 149 ] , [ 49 , 142 ] , [ 31 , 131 ] ,DATATl[ 17 , 117 ] , [ 7 , 101 ] , [ 2 , 83 ] ,[ 1 , 67 ] , [ 4 , 55 ] , [ 23 , 37 ] ,DATAT[ 31 , 37 ] , [ 36 , 40 ] , [ 34 , 40 ] ,[ 25 , 39 ] , [ 15 , 43 ] , [ 3 , 79 ] ,DATAXl[ 8 , 99 ] , [ 19 , 116 ] , [ 34 , 130 ] ,[ 50 , 140 ] , [ 68 , 145 ] , [ 86 , 148 ] ,DATA`[ 103 , 146 ] , [ 117 , 139 ] , [ 126 , 125 ] ,[ 128 , 106 ] , [ 123 , 84 ] , [ 110 , 62 ] ,DATAP|[ 89 , 42 ] , [ 58 , 25 ] , [ 21 , 13 ] ,[ 0 , 7 ] , [ 8 , 47 ] , [ 15 , 40 ] ,DATA[ 8 , 51 ] , [ 3 , 63 ]],DATAtL[ [ 11 , 10 , 56 ] , [ 11 , 55 , 10 ] , [ 57 , 55 , 11 ] ,[ 57 , 34 , 55 ] , [ 34 , 9 , 55 ] , [ 12 , 77 , 57 ] ,DATAp[ 77 , 34 , 57 ] , [ 12 , 33 , 77 ] , [ 78 , 9 , 34 ] , [12 , 76 , 33 ] , [ 58 , 76 , 12 ] , [ 78 , 35 , 9 ] ,DATAp[ 35 , 54 , 9 ] , [ 58 , 32 , 76 ] , [ 79 , 54 , 35 ] , [58 , 75 , 32 ] , [ 13 , 75 , 58 ] , [ 79 , 8 , 54 ] ,DATAp,[ 13 , 31 , 75 ] , [ 36 , 8 , 79 ] , [ 59 , 31 , 13 ] , [59 , 74 , 31 ] , [ 36 , 53 , 8 ] , [ 80 , 53 , 36 ] ,DATAp[ 14 , 74 , 59 ] , [ 14 , 30 , 74 ] , [ 37 , 53 , 80 ] , [37 , 7 , 53 ] , [ 60 , 30 , 14 ] , [ 60 , 73 , 30 ] ,DATApl[ 15 , 73 , 60 ] , [ 15 , 29 , 73 ] , [ 81 , 7 , 37 ] , [81 , 52 , 7 ] , [ 61 , 29 , 15 ] , [ 61 , 72 , 29 ] ,DATAp [ 81 , 6 , 52 ] , [ 38 , 6 , 81 ] , [ 16 , 72 , 61 ] , [16 , 28 , 72 ] , [ 38 , 51 , 6 ] , [ 82 , 51 , 38 ] ,DATAp[ 62 , 28 , 16 ] , [ 62 , 71 , 28 ] , [ 82 , 5 , 51 ] ,[ 39 , 5 , 82 ] , [ 17 , 71 , 62 ] , [ 17 , 27 , 71 ] ,DATApL[ 63 , 27 , 17 ] , [ 83 , 5 , 39 ] , [ 83 , 50 , 5 ] , [63 , 91 , 27 ] , [ 18 , 91 , 63 ] , [ 18 , 45 , 91 ] ,DATAp[ 40 , 50 , 83 ] , [ 40 , 4 , 50 ] , [ 64 , 45 , 18 ] , [64 , 90 , 45 ] , [ 19 , 90 , 64 ] , [ 84 , 4 , 40 ] ,DATAp[ 19 , 26 , 90 ] , [ 88 , 26 , 19 ] , [ 84 , 49 , 4 ] , [44 , 26 , 88 ] , [ 44 , 70 , 26 ] , [ 44 , 25 , 70 ] ,DATAp,[ 89 , 25 , 44 ] , [ 41 , 49 , 84 ] , [ 89 , 69 , 25 ] ,[ 68 , 67 , 23 ] , [ 20 , 69 , 89 ] , [ 41 , 3 , 49 ] ,DATAt[ 24 , 67 , 68 ] , [ 24 , 22 , 67 ] , [ 20 , 24 , 69 ] , [20 , 22 , 24 ] , [ 20 , 66 , 22 ] , [ 65 , 66 , 20 ] ,DATApl[ 65 , 21 , 66 ] , [ 85 , 3 , 41 ] , [ 85 , 48 , 3 ] , [42 , 48 , 85 ] , [ 42 , 0 , 48 ] , [ 86 , 0 , 42 ] ,DATAp [ 46 , 0 , 86 ] , [ 43 , 46 , 86 ] , [ 43 , 1 , 46 ] , [87 , 1 , 43 ] , [ 87 , 47 , 1 ] , [ 2 , 47 , 87 ]]],DATA([[1.0, 0.80000001192092896, 0.0, 1.0],DATA\[[ 80 , 118 ] , [ 85 , 115 ] , [ 81 , 112 ] ,[ 74 , 116 ] , [ 66 , 114 ] , [ 70 , 119 ] ,DATA\[ 71 , 112 ] , [ 73 , 119 ] , [ 65 , 114 ] ,[ 71 , 117 ] , [ 77 , 116 ] , [ 78 , 118 ] ,DATA\[ 81 , 114 ] , [ 84 , 115 ] , [ 82 , 113 ] ,[ 72 , 119 ] , [ 74 , 117 ] , [ 67 , 117 ] ,DATA\[ 65 , 113 ] , [ 71 , 115 ] , [ 68 , 116 ] ,[ 74 , 114 ] , [ 78 , 111 ] , [ 79 , 119 ] ,DATAX<[ 76 , 117 ] , [ 80 , 116 ] , [ 82 , 114 ] ,[ 85 , 115 ] , [ 84 , 97 ] , [ 70 , 82 ] ,DATAX[ 92 , 111 ] , [ 62 , 79 ] , [ 58 , 83 ] ,[ 58 , 96 ] , [ 59 , 111 ] , [ 62 , 122 ] ,DATA\<[ 65 , 130 ] , [ 93 , 123 ] , [ 90 , 132 ] ,[ 84 , 138 ] , [ 77 , 139 ] , [ 70 , 135 ] ,DATA`[ 127 , 138 ] , [ 103 , 121 ] , [ 103 , 125 ] ,[ 138 , 143 ] , [ 114 , 131 ] , [ 101 , 122 ] ,DATA` \[ 108 , 123 ] , [ 115 , 126 ] , [ 123 , 131 ] ,[ 133 , 135 ] , [ 140 , 138 ] , [ 142 , 142 ] ,DATA\ [ 142 , 140 ] , [ 130 , 82 ] , [ 124 , 79 ] ,[ 104 , 90 ] , [ 103 , 97 ] , [ 117 , 90 ] ,DATAX!|[ 97 , 98 ] , [ 134 , 75 ] , [ 99 , 99 ] ,[ 97 , 96 ] , [ 134 , 79 ] , [ 132 , 75 ] ,DATA\![ 135 , 77 ] , [ 16 , 133 ] , [ 45 , 121 ] ,[ 47 , 119 ] , [ 15 , 130 ] , [ 24 , 123 ] ,DATA\"[ 18 , 126 ] , [ 35 , 119 ] , [ 43 , 118 ] ,[ 30 , 126 ] , [ 22 , 131 ] , [ 39 , 123 ] ,DATAT#[ 36 , 93 ] , [ 39 , 91 ] , [ 25 , 82 ] ,[ 22 , 87 ] , [ 17 , 81 ] , [ 17 , 84 ] ,DATAL#[ 19 , 80 ] , [ 76 , 111 ] , [ 68 , 111 ] ,[ 84 , 111 ] , [ 79 , 126 ]],DATAt$[ [ 70 , 76 , 67 ] , [ 70 , 75 , 76 ] , [ 72 , 75 , 70 ] ,[ 72 , 77 , 75 ] , [ 71 , 77 , 72 ] , [ 73 , 77 , 71 ] ,DATAt$[ 73 , 68 , 77 ] , [ 73 , 69 , 68 ] , [ 73 , 74 , 69 ] ,[ 81 , 79 , 78 ] , [ 81 , 80 , 79 ] , [ 83 , 80 , 81 ] ,DATAt%\[ 82 , 80 , 83 ] , [ 82 , 84 , 80 ] , [ 41 , 39 , 40 ] ,[ 41 , 38 , 39 ] , [ 36 , 38 , 41 ] , [ 36 , 88 , 38 ] ,DATAt%[ 29 , 28 , 33 ] , [ 32 , 29 , 33 ] , [ 31 , 29 , 32 ] ,[ 60 , 58 , 62 ] , [ 63 , 58 , 60 ] , [ 63 , 59 , 58 ] ,DATAt&[ 57 , 59 , 63 ] , [ 56 , 59 , 57 ] , [ 56 , 55 , 59 ] ,[ 56 , 64 , 55 ] , [ 56 , 66 , 64 ] , [ 65 , 66 , 56 ] ,DATAt'<[ 65 , 61 , 66 ] , [ 42 , 53 , 45 ] , [ 42 , 54 , 53 ] ,[ 42 , 52 , 54 ] , [ 46 , 52 , 42 ] , [ 46 , 51 , 52 ] ,DATAt'[ 46 , 50 , 51 ] , [ 46 , 49 , 50 ] , [ 44 , 49 , 46 ] ,[ 44 , 48 , 49 ] , [ 47 , 48 , 44 ] , [ 47 , 43 , 48 ] ,DATAl(|[ 8 , 35 , 34 ] , [ 8 , 34 , 18 ] , [ 4 , 6 , 19 ] ,[ 4 , 19 , 20 ] , [ 9 , 20 , 19 ] , [ 85 , 86 , 33 ] ,DATAp)[ 86 , 34 , 33 ] , [ 28 , 85 , 33 ] , [ 28 , 30 , 85 ] ,[ 4 , 18 , 86 ] , [ 18 , 34 , 86 ] , [ 4 , 86 , 6 ] ,DATAp)[ 6 , 86 , 85 ] , [ 6 , 85 , 21 ] , [ 10 , 21 , 85 ] ,[ 10 , 85 , 22 ] , [ 1 , 14 , 87 ] , [ 1 , 87 , 30 ] ,DATAp*\[ 1 , 30 , 37 ] , [ 1 , 37 , 27 ] , [ 12 , 26 , 25 ] ,[ 13 , 25 , 26 ] , [ 0 , 25 , 13 ] , [ 0 , 13 , 27 ] ,DATAt*[ 0 , 13 , 27 , 37 ] , [ 0 , 37 , 23 ] , [ 88 , 37 , 38 ] ,[ 23 , 37 , 88 ] , [ 11 , 23 , 88 ] , [ 11 , 88 , 24 ] ,DATAl+[ 3 , 24 , 16 ] , [ 7 , 16 , 24 ] , [ 7 , 24 , 88 ] ,[ 7 , 88 , 15 ] , [ 8 , 17 , 35 ] , [ 5 , 35 , 17 ] ,DATAp,<[ 5 , 36 , 35 ] , [ 5 , 15 , 36 ] , [ 15 , 88 , 36 ] ,[ 22 , 85 , 87 ] , [ 2 , 22 , 87 ] , [ 2 , 87 , 14 ]]],DATA,[[1.0, 0.0, 0.0, 1.0],DATA\-[[ 88 , 136 ] , [ 88 , 124 ] , [ 60 , 128 ] ,[ 75 , 138 ] , [ 90 , 132 ] , [ 65 , 129 ] ,DATA\-[ 85 , 128 ] , [ 85 , 130 ] , [ 85 , 126 ] ,[ 82 , 134 ] , [ 80 , 136 ] , [ 83 , 132 ] ,DATA\.<[ 72 , 136 ] , [ 68 , 133 ] , [ 77 , 136 ] ,[ 60 , 122 ] , [ 63 , 124 ] , [ 66 , 134 ] ,DATAX.[ 82 , 138 ] , [ 58 , 123 ] , [ 89 , 127 ] ,[ 58 , 120 ] , [ 57 , 101 ] , [ 57 , 82 ] ,DATAX/L[ 54 , 110 ] , [ 55 , 118 ] , [ 55 , 115 ] ,[ 56 , 120 ] , [ 55 , 94 ] , [ 54 , 102 ] ,DATAX/[ 56 , 87 ] , [ 57 , 90 ] , [ 58 , 112 ] ,[ 58 , 107 ] , [ 59 , 116 ] , [ 90 , 135 ] ,DATA\0L[ 85 , 129 ] , [ 87 , 125 ] , [ 85 , 127 ] ,[ 81 , 135 ] , [ 84 , 131 ] , [ 83 , 133 ] ,DATA\0[ 67 , 131 ] , [ 70 , 135 ] , [ 74 , 136 ] ,[ 79 , 136 ] , [ 64 , 126 ] , [ 61 , 123 ] ,DATA\1l[ 70 , 136 ] , [ 62 , 131 ] , [ 86 , 137 ] ,[ 78 , 138 ] , [ 58 , 122 ] , [ 58 , 125 ] ,DATA\1[ 88 , 125 ] , [ 90 , 130 ] , [ 54 , 113 ] ,[ 55 , 117 ] , [ 57 , 121 ] , [ 56 , 119 ] ,DATAT2[ 54 , 106 ] , [ 54 , 98 ] , [ 57 , 83 ] ,[ 55 , 90 ] , [ 57 , 96 ] , [ 57 , 85 ] ,DATA\3 [ 58 , 104 ] , [ 58 , 109 ] , [ 59 , 114 ] ,[ 58 , 118 ] , [ 96 , 115 ] , [ 96 , 111 ] ,DATAX3[ 75 , 82 ] , [ 91 , 110 ] , [ 76 , 89 ] ,[ 70 , 77 ] , [ 83 , 93 ] , [ 98 , 115 ] ,DATAX4[ 94 , 113 ] , [ 84 , 100 ] , [ 70 , 76 ] ,[ 73 , 83 ] , [ 67 , 48 ] , [ 55 , 42 ] ,DATAT4[ 58 , 45 ] , [ 49 , 48 ] , [ 46 , 40 ] ,[ 49 , 39 ] , [ 44 , 49 ] , [ 44 , 44 ] ,DATAT5[ 47 , 51 ] , [ 47 , 41 ] , [ 46 , 43 ] ,[ 45 , 45 ] , [ 45 , 48 ] , [ 50 , 42 ] ,DATAT5[ 52 , 43 ] , [ 49 , 41 ] , [ 55 , 45 ] ,[ 57 , 45 ] , [ 54 , 44 ] , [ 53 , 39 ] ,DATAT6[ 57 , 44 ] , [ 48 , 40 ] , [ 44 , 47 ] ,[ 46 , 42 ] , [ 45 , 46 ] , [ 45 , 44 ] ,DATAT6[ 51 , 42 ] , [ 48 , 41 ] , [ 50 , 41 ] ,[ 56 , 45 ] , [ 53 , 43 ] , [ 54 , 44 ] ,DATAT7[ 46 , 50 ] , [ 54 , 40 ] , [ 45 , 42 ] ,[ 45 , 52 ] , [ 58 , 45 ] , [ 51 , 39 ] ,DATAT7[ 75 , 75 ] , [ 69 , 71 ] , [ 54 , 73 ] ,[ 54 , 78 ] , [ 65 , 74 ] , [ 71 , 74 ] ,DATAT8[ 59 , 74 ] , [ 74 , 73 ] , [ 61 , 71 ] ,[ 52 , 77 ] , [ 55 , 76 ] , [ 51 , 75 ] ,DATAT8[ 68 , 74 ] , [ 73 , 75 ] , [ 61 , 74 ] ,[ 75 , 74 ] , [ 72 , 72 ] , [ 57 , 72 ] ,DATAT9[ 65 , 71 ] , [ 53 , 78 ] , [ 56 , 75 ] ,[ 55 , 77 ] , [ 51 , 76 ] , [ 52 , 74 ] ,DATAT9[ 49 , 67 ] , [ 48 , 70 ] , [ 52 , 71 ] ,[ 53 , 68 ] , [ 51 , 71 ] , [ 63 , 64 ] ,DATAT:[ 54 , 65 ] , [ 69 , 66 ] , [ 73 , 68 ] ,[ 59 , 67 ] , [ 71 , 68 ] , [ 65 , 67 ] ,DATAT:[ 48 , 68 ] , [ 52 , 69 ] , [ 49 , 71 ] ,[ 58 , 65 ] , [ 72 , 67 ] , [ 56 , 67 ] ,DATAT;[ 68 , 67 ] , [ 62 , 67 ] , [ 52 , 71 ] ,[ 51 , 66 ] , [ 66 , 65 ] , [ 72 , 68 ] ,DATAT;[ 70 , 62 ] , [ 64 , 59 ] , [ 48 , 60 ] ,[ 49 , 65 ] , [ 59 , 61 ] , [ 65 , 61 ] ,DATAT<[ 53 , 61 ] , [ 69 , 61 ] , [ 56 , 58 ] ,[ 47 , 65 ] , [ 49 , 63 ] , [ 46 , 62 ] ,DATAT<[ 62 , 61 ] , [ 68 , 62 ] , [ 56 , 61 ] ,[ 70 , 62 ] , [ 67 , 59 ] , [ 52 , 59 ] ,DATAT=[ 60 , 58 ] , [ 48 , 65 ] , [ 51 , 62 ] ,[ 49 , 65 ] , [ 46 , 64 ] , [ 46 , 61 ] ,DATAT=[ 51 , 57 ] , [ 44 , 57 ] , [ 54 , 56 ] ,[ 65 , 53 ] , [ 62 , 50 ] , [ 54 , 51 ] ,DATAT>[ 47 , 58 ] , [ 54 , 55 ] , [ 61 , 55 ] ,[ 44 , 55 ] , [ 60 , 50 ] , [ 65 , 51 ] ,DATAT>[ 49 , 53 ] , [ 57 , 51 ] , [ 64 , 50 ] ,[ 61 , 50 ] , [ 65 , 52 ] , [ 63 , 54 ] ,DATAT?[ 54 , 56 ] , [ 57 , 56 ] , [ 43 , 56 ] ,[ 46 , 58 ] , [ 53 , 56 ] , [ 49 , 57 ]],DATA?[ [ 213 , 215 , 198 ] , [ 193 , 215 , 213 ] , [ 193 , 192 , 215 ] ,[ 212 , 192 , 193 ] , [ 212 , 214 , 192 ] , [ 210 , 211 , 194 ] ,DATA@L[ 201 , 214 , 212 ] , [ 199 , 211 , 210 ] , [ 199 , 200 , 211 ] ,[ 201 , 199 , 214 ] , [ 201 , 200 , 199 ] , [ 204 , 200 , 201 ] ,DATA@[ 204 , 209 , 200 ] , [ 204 , 195 , 209 ] , [ 204 , 208 , 195 ] ,[ 197 , 208 , 204 ] , [ 197 , 203 , 208 ] , [ 88 , 90 , 117 ] ,DATAA[ 205 , 203 , 197 ] , [ 88 , 114 , 90 ] , [ 205 , 206 , 203 ] ,[ 202 , 206 , 205 ] , [ 202 , 196 , 206 ] , [ 207 , 196 , 202 ] ,DATA|B\[ 88 , 94 , 114 ] , [ 104 , 94 , 88 ] , [ 104 , 106 , 94 ] ,[ 89 , 106 , 104 ] , [ 89 , 93 , 106 ] , [ 111 , 118 , 99 ] ,DATA|C [ 111 , 84 , 118 ] , [ 98 , 84 , 111 ] , [ 89 , 107 , 93 ] ,[ 98 , 102 , 84 ] , [ 113 , 102 , 98 ] , [ 100 , 102 , 113 ] ,DATA|C[ 116 , 107 , 89 ] , [ 116 , 92 , 107 ] , [ 100 , 83 , 102 ] ,[ 112 , 83 , 100 ] , [ 96 , 83 , 112 ] , [ 116 , 105 , 92 ] ,DATA|Dl[ 108 , 83 , 96 ] , [ 95 , 83 , 108 ] , [ 116 , 91 , 105 ] ,[ 95 , 115 , 83 ] , [ 110 , 115 , 95 ] , [ 86 , 91 , 116 ] ,DATAE[ 86 , 109 , 91 ] , [ 97 , 115 , 110 ] , [ 109 , 115 , 97 ] ,[ 86 , 115 , 109 ] , [ 103 , 115 , 86 ] , [ 103 , 101 , 115 ] ,DATAxE[ 87 , 101 , 103 ] , [ 87 , 119 , 101 ] , [ 78 , 77 , 70 ] ,[ 78 , 71 , 77 ] , [ 73 , 71 , 78 ] , [ 73 , 76 , 71 ] ,DATAtFl[ 79 , 76 , 73 ] , [ 74 , 76 , 79 ] , [ 74 , 72 , 76 ] ,[ 81 , 72 , 74 ] , [ 75 , 72 , 81 ] , [ 75 , 80 , 72 ] , DATAG [ 139 , 141 , 123 ] , [ 129 , 141 , 139 ] , [ 142 , 141 , 129 ] ,[ 142 , 130 , 141 ] , [ 131 , 130 , 142 ] , [ 131 , 140 , 130 ] ,DATAG[ 133 , 135 , 120 ] , [ 143 , 140 , 131 ] , [ 143 , 126 , 140 ] ,[ 125 , 135 , 133 ] , [ 125 , 127 , 135 ] , [ 132 , 127 , 125 ] ,DATAHl[ 143 , 134 , 126 ] , [ 124 , 127 , 132 ] , [ 134 , 127 , 124 ] ,[ 143 , 127 , 134 ] , [ 122 , 127 , 143 ] , [ 122 , 136 , 127 ] ,DATAI[ 137 , 136 , 122 ] , [ 137 , 121 , 136 ] , [ 128 , 121 , 137 ] ,[ 148 , 146 , 164 ] , [ 158 , 146 , 148 ] , [ 128 , 138 , 121 ] ,DATAI[ 145 , 146 , 158 ] , [ 145 , 157 , 146 ] , [ 156 , 157 , 145 ] ,[ 156 , 147 , 157 ] , [ 154 , 152 , 167 ] , [ 144 , 147 , 156 ] ,DATAJ|[ 144 , 161 , 147 ] , [ 162 , 152 , 154 ] , [ 162 , 160 , 152 ] ,[ 155 , 160 , 162 ] , [ 144 , 153 , 161 ] , [ 163 , 160 , 155 ] ,DATAK,[ 153 , 160 , 163 ] , [ 144 , 160 , 153 ] , [ 165 , 160 , 144 ] ,[ 165 , 151 , 160 ] , [ 150 , 151 , 165 ] , [ 150 , 166 , 151 ] ,DATAK[ 187 , 189 , 171 ] , [ 177 , 189 , 187 ] , [ 159 , 166 , 150 ] ,[ 159 , 149 , 166 ] , [ 190 , 189 , 177 ] , [ 190 , 178 , 189 ] ,DATAL[ 179 , 178 , 190 ] , [ 179 , 188 , 178 ] , [ 191 , 188 , 179 ] ,[ 181 , 183 , 168 ] , [ 191 , 174 , 188 ] , [ 173 , 183 , 181 ] ,DATAM<[ 173 , 175 , 183 ] , [ 180 , 175 , 173 ] , [ 191 , 182 , 174 ] ,[ 170 , 182 , 191 ] , [ 172 , 175 , 180 ] , [ 170 , 172 , 182 ] ,DATAM[ 170 , 175 , 172 ] , [ 170 , 184 , 175 ] , [ 185 , 184 , 170 ] ,[ 185 , 169 , 184 ] , [ 176 , 169 , 185 ] , [ 176 , 186 , 169 ] ,DATAtN[ 27 , 21 , 58 ] , [ 59 , 21 , 27 ] , [ 59 , 69 , 21 ] ,[ 25 , 69 , 59 ] , [ 25 , 34 , 69 ] , [ 57 , 34 , 25 ] ,DATAtO<[ 26 , 34 , 57 ] , [ 26 , 68 , 34 ] , [ 56 , 68 , 26 ] ,[ 56 , 32 , 68 ] , [ 24 , 32 , 56 ] , [ 24 , 67 , 32 ] ,DATAtO[ 60 , 67 , 24 ] , [ 60 , 33 , 67 ] , [ 60 , 66 , 33 ] ,[ 29 , 66 , 60 ] , [ 29 , 22 , 66 ] , [ 61 , 22 , 29 ] ,DATAtP|[ 61 , 64 , 22 ] , [ 28 , 64 , 61 ] , [ 28 , 31 , 64 ] ,[ 63 , 31 , 28 ] , [ 63 , 65 , 31 ] , [ 30 , 65 , 63 ] ,DATApQ[ 62 , 65 , 30 ] , [ 62 , 23 , 65 ] , [ 3 , 18 , 51 ] ,[ 48 , 18 , 3 ] , [ 48 , 50 , 18 ] , [ 48 , 14 , 50 ] ,DATApQ[ 14 , 0 , 50 ] , [ 48 , 44 , 14 ] , [ 45 , 0 , 14 ] ,[ 17 , 12 , 48 ] , [ 12 , 44 , 48 ] , [ 35 , 0 , 45 ] ,DATApR\[ 10 , 35 , 45 ] , [ 39 , 35 , 10 ] , [ 17 , 43 , 12 ] ,[ 9 , 35 , 39 ] , [ 17 , 13 , 43 ] , [ 9 , 4 , 35 ] ,DATApR[ 41 , 4 , 9 ] , [ 49 , 13 , 17 ] , [ 11 , 4 , 41 ] ,[ 49 , 42 , 13 ] , [ 11 , 55 , 4 ] , [ 40 , 55 , 11 ] ,DATAlS[ 49 , 5 , 42 ] , [ 7 , 55 , 40 ] , [ 2 , 5 , 49 ] ,[ 36 , 55 , 7 ] , [ 36 , 20 , 55 ] , [ 6 , 20 , 36 ] ,DATAlT<[ 2 , 46 , 5 ] , [ 38 , 20 , 6 ] , [ 53 , 46 , 2 ] ,[ 8 , 20 , 38 ] , [ 8 , 54 , 20 ] , [ 53 , 16 , 46 ] ,DATApT[ 37 , 54 , 8 ] , [ 37 , 1 , 54 ] , [ 19 , 16 , 53 ] ,[ 19 , 47 , 16 ] , [ 52 , 47 , 19 ] , [ 52 , 15 , 47]]]]DATAU|DATA URegister(draw, event, bevent)TXdU<TXTextVVVV"DATAVV.FREEDATA0VOpen python scripts here and ALT+P to run themOB 7(OBCamera l??????w?w?????????OBd???d)?>?d)???OB(7 OBLamp  L-@p????????L-@p?????DOBd??=# ?>=?@???GLOB`Ŝ\ DNA1[@SDNANAMEP*next*prev*first*lastxyzwxminxmaxyminymax*newid*libname[24]usflagpadid*idblock*filedataname[160]totcurvecurblocktypeshowkeypostyperttotelem*dataname[32]sliderminslidermax*refkeyelemstr[32]elemsizecurvalblock*ipo*fromtotkeyslurphactkey**scripts*flagactscripttotscript*line*formatlenblen*nameflagsnlineslines*curl*sellcurcselc*undo_bufundo_posundo_len*compiledsizeseekclipstaclipendlensortho_scaledrawsizeYF_dofdistYF_apertureYF_bkhtypeYF_bkhbiasYF_bkhrotscriptlink*anim*ibuf*mipmap[10]oklastframelastqualitytpageflagtotbindxrepyreptwstatwendbindcode*repbind*packedfilelastupdateanimspeedreserved1texcomaptomaptonegblendtype*object*texprojxprojyprojzmappingofs[3]size[3]texflagcolormodelrgbkdef_varcolfacnorfacvarfacdispfacwarpfac*handle*pname*stnamesstypesvars*varstr*result*cfradata[32](*doit)()(*callback)()versionaipotypedata[16]*ima*cube[6]imat[4][4]stypenotlaycuberesdepthrecalclastsizepad1noisesizeturbulbrightcontrastrfacgfacbfacfiltersizemg_Hmg_lacunaritymg_octavesmg_offsetmg_gaindist_amountns_outscalevn_w1vn_w2vn_w3vn_w4vn_mexpvn_distmvn_coltypenoisedepthnoisetypenoisebasisnoisebasis2imaflagcropxmincropymincropxmaxcropymaxxrepeatyrepeatextendcheckerdistnablaframesoffsetsfrafie_ima*plugin*coba*envfradur[4][2]modetotexenergydistspotsizespotblendhaintatt1att2bufsizesampshadspotsizebiassoftray_sampray_sampyray_sampzray_samp_typearea_shapearea_sizearea_sizeyarea_sizeztexactshadhalostepYF_numphotonsYF_numsearchYF_phdepthYF_useqmcYF_bufsizeYF_padYF_causticblurYF_ltradiusYF_glowintYF_glowofsYF_pad3YF_glowtypeYF_pad2*mtex[10]layspecrspecgspecbmirrmirgmirbambrambbambgambemitangspectraray_mirroralpharefspeczoffsaddtranslucencyfresnel_mirfresnel_mir_ifresnel_trafresnel_tra_ifilterpad0ray_depthray_depth_traharseed1seed2mode2flarecstarclinecringchasizeflaresizesubsizeflareboostrgbselpr_typepr_backpr_lampseptexpad4pad5diff_shaderspec_shaderroughnessrefracparam[4]rmsdarkness*ramp_col*ramp_specrampin_colrampin_specrampblend_colrampblend_specramp_showpad3rampfac_colrampfac_specfrictionfhreflectfhdistxyfrictdynamodepad2YF_arYF_agYF_abYF_dscaleYF_dpwrYF_dsmpYF_presetYF_djitname[256]scale*bbi1j1k1i2j2k2selcol1selcol2quat[4]expxexpyexpzradrad2s*mat*imatelemsdisp**mattotcolloc[3]rot[3]wiresizerendersizethreshvec[3][3]alfas[3][2]h1h2f1f2f3hidevec[4]s[2]mat_nrpntsupntsvresoluresolvorderuordervflaguflagv*knotsu*knotsv*bp*beztnurb*bevobj*taperobj*textoncurve*path*keybev*orcopathlenbevresolwidthext1ext2spacemodespacinglinedistshearfsizexofyof*strfamily[24]*vfontmaxrcttotrctadrcodevartypetotvertipoextrapbitmask*tpageuv[4][2]col[4]transptileunwrapeffect*mface*dface*tface*mvert*medge*dvert*mcol*msticky*texcomesh*derived*decimated*oc*sumohandletotedgetotfacecubemapsizesmoothreshsubdivsubdivrsubsurftypev1v2v3v4punoedcodecreasedef_nrweight*dwtotweightco[3]no[3]co[2]pntswtypeutypevtypew*defdvec[3]max**obpartypepar1par2par3parsubstr[32]*pardata*parent*track*action*pose*activeconconstraintChannelsnetworkdefbasedloc[3]orig[3]dsize[3]drot[3]dquat[4]obmat[4][4]parentinv[4][4]colbitstransflagipoflagtrackflagupflagipowinscaflagscavisflagboundtypedupondupoffdupstadupendsfctimemassdampinginertiaformfactorsofttimerdampingsizefacdtdtxactcolpropsensorscontrollersactuatorsbbsize[3]dfrasactdefgameflaggameflag2softflagdummyanisotropicFriction[3]constraintsnlastripshooks*pd*soft*lifelbufporttoonedgemat[4][4]cent[3]falloff*indexartotindexcurindexactiveforcedeflectforcefieldpdef_damppdef_rdamppdef_permf_strengthf_powermaxdistpdef_sbdamppdef_sbiftpdef_sbofttotpointtotspring*bpoint*bspringnodemassgravmediafrictrklimitphysics_speedgoalspringgoalfrictmingoalmaxgoaldefgoalvertgroupinspringinfrictefrainterval**keystotpointkeymistypehorrhorghorbhorkzenrzengzenbzenkambkfastcolexposureexprangelinfaclogfacgravityactivityBoxRadiusskytypemisimiststamistdistmisthistarrstargstarbstarkstarsizestarmindiststardiststarcolnoisedofstadofenddofmindofmaxaodistaodistfacaoenergyaobiasaomodeaosampaomixaocolorphysicsEnginehemiresmaxiterdrawtypesubshootpsubshootenodelimmaxsublamppamapamielmaelmimaxnodeconvergenceradfacgammaselcolsxsy*lpFormat*lpParmscbFormatcbParmsfccTypefccHandlerdwKeyFrameEverydwQualitydwBytesPerSeconddwFlagsdwInterleaveEveryavicodecname[128]*cdParms*padcdSizeqtcodecname[128]mixratemainpad[3]*avicodecdata*qtcodecdatacfraimagesframaptoframelenblurfacedgeRedgeGedgeBfullscreenxplayyplayfreqplayattribrt1rt2stereomodedimensionspresetpad[2]maximsizexschyschxaspyaspxpartsypartssafetyborderwinposplanesimtypebufflagqualityscemoderendererocresrpad[2]alphamodedogammaosafrs_secedgeintsame_mat_reduxgausspostmulpostgammapostaddpostigammaposthuepostsatdither_intensityzminfocuszgammazsigmazblurGIqualityGIcacheGImethodGIphotonsGIdirectYF_AAYFexportxmlYF_nobumpYF_clamprgbyfpad1GIdepthGIcausdepthGIpixelspersampleGIphotoncountGImixphotonsGIphotonradiusYF_numprocsYF_raydepthYF_AApassesYF_AAsamplesGIshadowqualityGIrefinementGIpowerGIindirpowerYF_gammaYF_exposureYF_raybiasYF_AApixelsizeYF_AAthresholdbackbuf[160]pic[160]ftype[160]col[3]framename[64]*camera*world*setbase*basact*groupcursor[3]twcent[3]twmin[3]twmax[3]selectmodeproportionalprop_modeeditbutsize*ed*radioframingaudiomarkers*theDagdagisvaliddagflagszoomblendximyim*rectspacetypeblockscale*areablockhandler[8]viewmat[4][4]viewinv[4][4]persmat[4][4]persinv[4][4]winmat1[4][4]viewmat1[4][4]viewquat[4]perspview*bgpic*localvdlocalviewlayactscenelockaroundcamzoomgridgridviewnearfarmxmymxomyogridlinesviewbutgridflagmodeselectmenunrtexnrtwtypetwmodetwflagtwpadtwmat[4][4]verthormaskmin[2]max[2]minzoommaxzoomscrollkeeptotkeepaspectkeepzoomoldwinxoldwinyrowbutv2d*editipoipokeytotipopinbutofschannellockmedian[3]cursenscuractaligntabomainbmainbo*lockpointexfromshowgrouprectxrectycurymodeltypescriptblockre_aligntab[7]*filelisttotfiletitle[24]dir[160]file[80]ofssortmaxnamelencollums*libfiledataretvalmenuact(*returnfunc)()*menupoopsvisiflagtree*treestoreoutlinevisstoreflagdeps_flags*imageimanrcurtile*texttopviewlinesfont_idlheightleftshowlinenrstabnumbercurrtab_setshowsyntaxunused_paddpix_per_linetxtscrolltxtbar*scriptredrawstitle[28]fasesubfasemouse_move_redrawimafasedirslidirsli_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*cmap*arg1outline[4]neutral[4]action[4]setting[4]setting1[4]setting2[4]num[4]textfield[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_drawtypeback[4]header[4]panel[4]shade1[4]shade2[4]hilite[4]grid[4]wire[4]select[4]active[4]transform[4]vertex[4]vertex_select[4]edge[4]edge_select[4]edge_seam[4]edge_facesel[4]face[4]face_select[4]face_dot[4]normal[4]vertex_sizefacedot_sizebpad[2]syntaxl[4]syntaxn[4]syntaxb[4]syntaxv[4]syntaxc[4]tuitbutstv3dtfiletipotinfotsndtacttnlatseqtimatimaseltexttoopsttimespec[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_sizevertbaseedgebaseareabase*scenestartxendxstartyendysizexsizeyscenenrscreennrfullmainwinwinakthandler[8]*newvvec*v1*v2panelname[64]tabname[64]ofsxofsycontrolold_ofsxold_ofsysortcounter*paneltab*v3*v4*fullwinmat[4][4]headrctwinrctheadwinwinheadertypebutspacetypewinxwinyhead_swaphead_equalwin_swapwin_equalheadbutlenheadbutofscursorspacedatauiblockspanels*curscreen*curscenedisplaymodefileflagsglobalfname[80]*se1*se2*se3nrdone*stripdataorxory*newseqstartstartofsendofsstartstillendstillmachinestartdispenddispmulhandsize*strip*curelemfacf0facf1*seq1*seq2*seq3seqbase*soundlevelpancurpos*effectdata*oldbasep*parseq*seqbasepmetastackedgeWidthangleforwardwipetypefMinifClampfBoostdDistdQualitybNoCompbuttypestaendlifetimetotpartseednormfacobfacrandfactexfacrandlifeforce[3]dampvectsizedefvec[3]mult[4]life[4]child[4]mat[4]texmapcurmultstaticstep*keysheightnarrowspeedminfactimeoffs*obpremat[4][4]postmat[4][4]vec[3]faclenoalphaoeff[2]iterlastfralimbbaseeff[3]effg[3]effn[3]memslowtotytotxxyconstrainttotdefdef_scrolllimb_scrollused*idusedelemdxdylinkotypedataold*poin*oldpoinresetdistlastval*makeyqualqual2targetName[32]toggleName[32]value[32]maxvalue[32]materialName[32]damptimeraxisdelaypropname[32]matname[32]axisflag*fromObjectsubject[32]body[32]pulsefreqtotlinks**linksinvertfreq2axisfbuttonbuttonfhathatfprecisionstr[128]*mynewinputstotslinks**slinksvalvalotime*actblendinprioritystridelengthstrideaxisreserved2reserved3sndnrmakecopycopymadepad[1]trackvolume*melinVelocity[3]localflagforceloc[3]forcerot[3]linearvelocity[3]angularvelocity[3]addedlinearvelocity[3]anotherpad[4]butstabutendminvisifacminloc[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_gaindistancestreamlenloopstartloopendchannelshighpriopad[10]gaindopplerfactordopplervelocitynumsoundsblendernumsoundsgameengine*gkeypadfokeygobjectgkey*activechildbaserollhead[3]tail[3]parmat[4][4]defmat[4][4]irestmat[4][4]posemat[4][4]boneclassfiller1filler2filler3bonebasechainbaseres1res2res3chanbase*achan*pchanactnrname[30]enforceoffset[3]orient[3]roll[3]*tartoleranceiterationssubtarget[32]cacheeff[3]cachemat[4][4]lockflagfollowflagzmaxvolmodeplaneorglengthbulgeactstartactendstridelenrepeatblendoutTYPEcharucharshortushortintlongulongfloatdoublevoidLinkListBasevec2svec2ivec2fvec2dvec3ivec3fvec3dvec4ivec4fvec4drctirctfIDLibraryFileDataIpoKeyBlockKeyScriptLinkTextLineTextPackedFileCameraImageanimImBufMTexObjectTexPluginTexCBDataColorBandEnvMapLampWaveMaterialVFontVFontDataMetaElemBoundBoxMetaBallBezTripleBPointNurbCurvePathIpoCurveTFaceMeshMVertMEdgeMDeformVertMColMStickyDerivedMeshDispListMeshOcInfoMFaceMDeformWeightBoneLatticebDeformGroupLBufbActionbPosebConstraintChannelPartDeflectSoftBodyLifeObHookSBVertexBodyPointBodySpringWorldRadioBaseAviCodecDataQuicktimeCodecDataAudioDataRenderDataGameFramingTimeMarkerSceneGroupDagForestBGpicView3DSpaceLinkScrAreaView2DSpaceInfoSpaceIpoSpaceButsSpaceSeqSpaceFiledirentryBlendHandleSpaceOopsTreeStoreSpaceImageSpaceNlaSpaceTextSpaceScriptScriptSpaceTimeSpaceImaSelImaDirOneSelectableImaThemeUIThemeSpacebThemeSolidLightUserDefbScreenScrVertScrEdgePanelFileGlobalStripElemStripPluginSeqSequencebSoundMetaStackEditingWipeVarsGlowVarsEffectBuildEffPartEffParticleWaveEffDeformLimbIkaTreeStoreElemOopsbPropertybNearSensorbMouseSensorbTouchSensorbKeyboardSensorbPropertySensorbCollisionSensorbRadarSensorbRandomSensorbRaySensorbMessageSensorbSensorbControllerbJoystickSensorbExpressionContbPythonContbActuatorbAddObjectActuatorbActionActuatorbSoundActuatorbCDActuatorbEditObjectActuatorbSceneActuatorbPropertyActuatorbObjectActuatorbIpoActuatorbCameraActuatorbConstraintActuatorbGroupActuatorbRandomActuatorbMessageActuatorbGameActuatorbVisibilityActuatorFreeCamerabSamplebSoundListenerSpaceSoundGroupKeyObjectKeyGroupObjectbArmaturebPoseChannelbActionChannelSpaceActionbConstraintbKinematicConstraintbTrackToConstraintbRotateLikeConstraintbLocateLikeConstraintbActionConstraintbLockTrackConstraintbFollowPathConstraintbDistanceLimitConstraintbRotationConstraintbStretchToConstraintbActionStripTLEN  0PDtdl(XP4@l<0P<  L, @,,\(PD$h$x$T x Ht8th  8( ,@0,HhH,(lDLP@< <@Lx0848l(@0pP<`|,,,8,<48STRC                    !" #$%& '()*+,-./01234 567 89:;<=>? @!AB6 "CDEFGHIJKL(M#$N%O%PQRSTUVWXYZ[!\]^_&`abc'd(efghijklmnopqrstuvw) xyz{| }~ *nop+*,'d##CDQR(43t(#)+,-2mnopqCD&(M.(/]mnop     `a++ !"#&($%&'()*+,-./012M0341!\222356789:;<=>?@ABCD3EF435 G H(/IJlKkLMNO5 PQRSTUVWX6YQZUX777[X\]^_`abcde6f5g8'35 h H'i'j'k(9lm/I noKkLlpJqrst^_38uvwxyz{|}0~:::6f5g  &; <$35  H(m/I   =>?@A<oBCD lKkLJE[>FG?F_=[@nopAH \]6(mIII DkJ''X ''(9l35KL M    H /IKkL>JM        NOPJJQQQ' N      RYOST *R!"*U7m#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMN(&MVOPQRSTUVWXYZ[\]WWW^_`'dX a bcdefghijklY m no*pZqrs[aXtYuvwxyz{|}~A]\*!]]]^'U^# W_ V \[nZM `a #(ez{Ab2ccd'abQEj     ecccdfccdgccd*e ! "()#$%& '(hccd)*+,e - $. / 01234567*8i ccde -*jccdk9:;<=>?@AlBCDE FGmccde H$I / JnKLMNoccde #O$PQz{'p ccd 'e qccd RST6 UVWXYZ[\]^_r ccds`*6 tccde auQccdbcdefghijklmnopqrstuvwxyz{|}~vvww*% F x*yzzz xyyyyyyyyyyyyyy{Y|' {    }   ^~~~~ ~~ !"#$%&'()ddd~~ ~*~+},-./0123456789:;<M = > ? @ ABCDE%OFGHQI 3JK<LM 3 xy| } &N 3OPQRSTUVWXYZ(^$N[\]^_ `abcd e fg h ` ijklmnopqrstt3tuvwx*yz{|}~trw ' 3 ('In X      * /  * k0 y 0'* '  R*! ' Kuv _ uvauv '< ^' ' KL uv ' uv _y'*uv  '   !\!  ( 6ccde az{'*v ''(KkL>'  _ ! "#GGGG $ %&'Kk>()*+,-./ 0 1234  Kk> _L 5(  _K 567ccde K$_8'*MMM(9 (_9:;<='>?@AB_C'>_A'>_A'>_A'>OvKA'>DA'>E'>A*;   F'>GHIJA_(KOvKLMNOENDB